kba*_*tis 6 php sockets html5 broadcast server-sent-events
我想实现一个简单的Server-Sent事件应用程序,客户端监听这样的php文件
<script src="eventsource.js"></script>
<script>
var es = new EventSource('../sse.php');
es.onmessage = function (event) {
var data = JSON.parse(event.data);
console.log('msg: ' + event.data);
};
es.onopen = function () {
console.log('connected');
}
</script>
Run Code Online (Sandbox Code Playgroud)
但后来我需要能够广播一条消息,每个连接的客户端同时获取它.
php文件将被另一个请求触发,它会将一些SSE数据"回显"给所有客户端.
这可能吗?我可以采取另一条路线吗?
先感谢您
PHP对此并不是很好.如果有很多客户端正在等待此事件,那么您将需要为每个等待的客户端提供PHP解释器的实例(可能还有一个apache线程).
您可能会考虑做的是让事件驱动的服务器处理这个问题.Node.JS和Tornado(Python)是我过去在类似情况下使用过的两个环境.如果您使用Node.js,您可能需要查看socket.io - 它不使用Server Sent Events,但会使您想要的非常简单.
你可以并排两个网络服务器,你当前的服务器(我假设是Apache)和你写的一个处理等待更新的客户端.每当PHP服务器想要向等待的客户端发送消息时,PHP服务器通知另一个服务器(AMQP,ZeroMQ,redis Pub/Sub或非公共接口上的简单HTTP请求都是不错的选择),并且该服务器将消息传递给任何等待的客户端.
你可以在github上看到一个非常简单的版本,我正在谈论使用node.js + socket.io(可以很容易地被SSE取代).