在socket.io中发出不起作用

时间:2014-01-01 13:12:39

标签: node.js express socket.io

我创建了一个相当简单的socket.io项目来证明'sockets.emit'似乎有问题。

我在这里创建了一个git:https://github.com/dirkk0/minimalsocket

有问题的行是 https://github.com/dirkk0/minimalsocket/blob/master/server.js#l17-21

    // this should work but doesn't
    io.sockets.emit(JSON.stringify(msg))

哪个不起作用。

因此,作为一个workaroud,我遍历客户端发送消息,这很好用:

    io.sockets.clients().forEach(function (socket) {
        socket.send(JSON.stringify(msg));
    });

我在Ubuntu 12.04上测试了节点v0.10.24,npm 1.3.21,socket.io 0.9.16,express 3.4.7和MacOSX节点0.10.12。还有MacOSX上的Safari,Firefox,Chrome和Windows7上的Chrome。 结果是一致的。

我忽略了一些明显的事情吗?

谢谢,   德克

编辑:是的,我忽略了我必须给频道一个名字(出于某种原因,不需要.send),如: io.sockets.emit('message', JSON.stringify(msg)) socket.emit没有被破坏。

1 个答案:

答案 0 :(得分:3)

您忘记了emit()的活动名称,该活动名称应为io.sockets.emit('message', yourObject)或将其更改为io.sockets.send(yourObject);

emit()send()的语法:

// @param yourEventName is a string
// @param yourObject is an serializable object (that mean you can stringify it)
socket.emit(yourEventName, yourObject);

// @param yourObject is a serializable object
socket.send(yourObject) // equipvalent to socket.emit('message', yourObject) (???)