我正在构建一个简单的系统,类似实时新闻订阅,使用node.js + socket.io。
因为这是一个"只读"系统,客户端连接并接收数据,但客户端从未发送其自己的任何数据。服务器生成需要发送到所有客户端的消息,没有客户端生成任何消息; 然而我需要进行广播。
socket.io广播的文档(页面底部)说:
要进行广播,只需将broadcast标志添加到
emit
和send
方法调用中。广播意味着向除了启动它的套接字之外的所有其他人发送消息。
所以我目前捕获最近连接的客户端,并将emit()
到该套接字和 broadcast.emit()
到该套接字,使得这个新客户端获取新的数据和所有其他客户端。但感觉客户端在这里的作用仅仅是对我本来认为socket.io已经支持的问题进行了解决。
是否有一种方式可以基于由服务器发起的事件将数据发送到所有客户端?
我的当前方法大致是:
var socket;
io.sockets.on("connection", function (s) {
socket = s;
});
/* bunch of real logic, yadda yadda ... */
myServerSideNewsFeed.onNewEntry(function (msg) {
socket.emit("msg", { "msg" : msg });
socket.broadcast.emit("msg", { "msg" : msg });
});
基本上,导致数据需要发送到客户端的事件都是在服务器端发生的,而不是在客户端。
io.sockets.emit
不是一个已定义的函数。 - d11wtqio.sockets.broadcast.emit()
,我的错,这似乎可以工作! - d11wtqio.sockets.broadcast.emit
是最适合的选择。 - alessioalex