如何使用PHP从服务器向客户端发送消息,避免不必要的Ajax调用。
以下是实现方法:
用户Alice做出更改并将其发送到服务器。
然后,服务器检查哪些用户不是最新的,如果不是,则调用一些代码将与更改相关的信息发送给Bob(在这种情况下不是最新的用户)。
如何向Bob发送消息?
如何使用PHP从服务器向客户端发送消息,避免不必要的Ajax调用。
以下是实现方法:
用户Alice做出更改并将其发送到服务器。
然后,服务器检查哪些用户不是最新的,如果不是,则调用一些代码将与更改相关的信息发送给Bob(在这种情况下不是最新的用户)。
如何向Bob发送消息?
var source = new EventSource('/newFile');
source.addEventListener('message', function(e) {
// Use AJAX and pull new file here
}, false);
不幸的是,似乎(当然)没有IE支持。可以使用诸如EventSource HQ之类的库来支持跨浏览器服务器发送事件。它将抽象出需要处理魔鬼浏览器的细节。
其他技术(例如使用插件提供的套接字——Silverlight、Java小程序、Flash等)也可以使用,但是为了利用它们,您需要正确的客户端(浏览器/插件组合)。
当然,你也可以自己实现所有这些东西。我鼓励你尝试作为学习练习。
对于你的生产代码,最好使用一个封装了所有这些概念和技术的库,例如 SignalR(用于ASP.NET)、Ratchet(用于PHP)、Signal.IO(用于node.js)、Faye(用于Ruby)……其中一些库将实现多种技术,根据客户端选择最佳技术,自动回退到其他技术。它们真的能够节省你很多麻烦!
var io = require('socket.io').listen(80);
io.sockets.on('connection', function (socket) {
socket.on('message', function () { });
socket.on('disconnect', function () { });
// more stuff here
if(somethingChanged) {
socket.send(JSON.stringify({changed: true, file: 'file1.txt', newContent: 'Im fresh off the press yo!'});
}
});
对于客户端:
<script>
var socket = io('http://localhost/');
socket.on('connect', function () {
socket.send('anything-new');
socket.on('message', function (msg) {
if(JSON.parse(msg).changed) {
// Do stuff here
}
});
});
</script>
虽然这只是一个非常简单的例子,但希望足以让你入门。