使用socket.io在服务器事件上从服务器向客户端发送数据

时间:2014-09-28 13:13:03

标签: node.js socket.io

我可以使用

在服务器上发送带字符串标签的数据
   import io = require('socket.io');
   var sio = io.listen(server);
   sio.sockets.on('connection', function (socket) {
    socket.emit('news', { hello: 'world' });
    socket.on('my other event', function (data) {
        console.log(data);
    });

外部套接字我只能发送一个字符串

sio.sockets.emit( "keystroke");

有没有办法让数据在外面连接'而不仅仅是一个字符串。

我想在事件服务器端发送带有相同标签的json数据,例如' news'

1 个答案:

答案 0 :(得分:1)

当然,您只需要保存要发送的套接字或使用可以广播的聊天室。这是保存套接字的样子:

import io = require('socket.io');
var sio = io.listen(server);
var client;
sio.sockets.on('connection', function (socket) {
    socket.emit('news', { hello: 'world' });
    socket.on('my other event', function (data) {
        console.log(data);
    });
    client = socket;
});


// then, sometime later in response to some server-side event,
// you can send to that saved socket
client.emit("whatever", {yourData: someData, otherData: whatever});

当然,您可能不会像在此处显示的那样将客户端套接字保存在变量中,因为您可能支持许多不同的客户端。你应该如何保存它取决于你想要做什么。如果多个客户端想要注册对特定类型事件的兴趣,那么socket.io中内置的聊天室功能可以很好地服务于该目的。每个客户端都可以请求使用您自己的特定命令加入该聊天室,服务器可以将它们放入该聊天室,然后,当事件发生时,您可以将数据广播到聊天室,它将被发送给所有客户端。放进聊天室。聊天室就像socket.io库为您管理的客户端套接字保存列表一样。

如果您拥有"事件中的所有客户" chatrooom,然后您可以从服务器广播到该聊天室中的所有客户端:

io.to('events').emit("whateverMsg", {yourData: someData, otherData: whatever});