Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Socket.io在使用名称空间时不发送/接收事件_Javascript_Node.js_Sockets_Coffeescript_Socket.io - Fatal编程技术网

Javascript Socket.io在使用名称空间时不发送/接收事件

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

我用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 '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)