d11*_*wtq 14 node.js socket.io
我正在使用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 });
});
Run Code Online (Sandbox Code Playgroud)
基本上导致数据需要发送到客户端的事件都是服务器端,而不是客户端.
use*_*594 19
为什么不在下面这样做?
io.sockets.emit('hello',{msg:'abc'});
Run Code Online (Sandbox Code Playgroud)
由于您只在服务器端发出事件,因此应为服务器创建自定义EventEmitter.
var io = require('socket.io').listen(80);
events = require('events'),
serverEmitter = new events.EventEmitter();
io.sockets.on('connection', function (socket) {
// here you handle what happens on the 'newFeed' event
// which will be triggered by the server later on
serverEmitter.on('newFeed', function (data) {
// this message will be sent to all connected users
socket.emit(data);
});
});
// sometime in the future the server will emit one or more newFeed events
serverEmitter.emit('newFeed', data);
Run Code Online (Sandbox Code Playgroud)
注意:newFeed这只是一个事件示例,您可以拥有任意数量的事件.
重要
上面的解决方案也更好,因为将来您可能只需要向某些客户端发出某些消息,而不是所有客户端(因此需要条件).对于简单的东西(只发出一个消息给所有的客户无论是什么),io.sockets.broadcast.emit()是一个更适合确实如此.
| 归档时间: |
|
| 查看次数: |
15279 次 |
| 最近记录: |