Javascript Socket.io在使用名称空间时不发送/接收事件
我用coffeescript编写了以下代码,它在服务器端使用socket.io和node.js 服务器Javascript Socket.io在使用名称空间时不发送/接收事件,javascript,node.js,sockets,coffeescript,socket.io,Javascript,Node.js,Sockets,Coffeescript,Socket.io,我用coffeescript编写了以下代码,它在服务器端使用socket.io和node.js 服务器 io.of("/room").authorization (handshakeData, callback) -> #Check if authorized callback(null,true) .on 'connection', (socket) -> console.log "connected!" socket.emit 'newMess
io.of("/room").authorization (handshakeData, callback) ->
#Check if authorized
callback(null,true)
.on 'connection', (socket) ->
console.log "connected!"
socket.emit 'newMessage', {msg: "Hello!!", type: 1}
socket.on 'sendMessage', (data) ->
@io.sockets.in("/room").emit 'newMessage', {msg: "New Message!!", type: 0}
客户端
socket = io.connect '/'
socket.of("/room")
.on 'connect_failed', (reason) ->
console.log 'unable to connect to namespace', reason
.on 'connect', ->
console.log 'sucessfully established a connection with the namespace'
socket.on 'newMessage', (message) ->
console.log "Message received: #{message.msg}"
我的问题是,在我开始使用名称空间之后,服务器和客户端之间的通信停止了。我没有发现任何与此类似的工作示例,因此我可能做错了什么名称空间在客户端的使用方式与在服务器端的使用方式不同。客户端代码应直接连接到命名空间路径,如下所示:
var socket = io.connect('/namespace');
socket.on('event', function(data) {
// handle event
});
也就是说,名称空间不同于房间。名称空间在客户端连接,而文件室在服务器端连接。因此,此代码不起作用:
io.sockets.in('/namespace').emit('event', data);
您必须引用名称空间,或者从全局io
对象调用它
var nsp = io.of('/namespace');
nsp.emit('event', data);
// or get the global reference
io.of('/namespace').emit('event', data);
感谢您的快速回答,帮助我理解了名称空间是如何工作的,但是我在尝试授权连接到名称空间时遇到了问题。我尝试遵循socket.io wiki()中的一个示例,但在发送/接收事件时失败。连接似乎成功,因为事件被触发为“已连接”,并且“成功建立了与命名空间的连接”消息显示在客户端和服务器日志中,您可以在服务器端看到这些消息。我将套接字作为“连接”事件的参数使用。在客户端,我使用的对象与连接服务器时使用的对象相同谢谢!!现在一切都好了。维基有点让人困惑,我把从那里得到的一些代码和你的代码混在一起了!套接字如何知道要连接到哪个url/端口?@something名称空间上的内容只是一条路径。如果需要URL或端口,只需按如下方式指定:
io.connect('http://example.com:8080/namespace)
。