3

サーバー側でsocket.ioとnode.jsを利用するcoffeescriptで書かれた次のコードがあります

サーバ

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 に答える