【发布时间】:2012-01-25 05:02:52
【问题描述】:
我正在使用 node.js + socket.io 构建一个简单的系统,例如实时新闻提要。
由于这是一个“只读”系统,客户端连接并接收数据,但客户端实际上从不发送自己的任何数据。服务器生成需要发送给所有客户端的消息,没有客户端生成任何消息;但我确实需要广播。
documentation for socket.io's broadcast(页尾)说
要广播,只需将
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 });
});
基本上导致数据需要发送到客户端的事件都是服务器端的,而不是客户端的。
【问题讨论】: