3

我用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}"

我的问题是,在我开始使用命名空间后,服务器和客户端之间的通信已经停止工作。我没有找到任何类似的工作示例,所以我可能做错了什么

4

1 回答 1

5

命名空间不像在服务器端使用那样在客户端上使用。您的客户端代码应直接连接到命名空间路径,如下所示:

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);
于 2013-09-22T13:38:37.840 回答