2013-01-20 104 views
1

我正在使用nodejs和socketio。我做了一個私人聊天應用程序,它向選定的用戶發送消息。套接字io將消息發送給房間中的用戶

我當前的代碼是:

  chat_room.sockets.socket(user).emit(
       'chat', 
       { 
        message : message, 
        from : sockets[socket.id].username 
       } 
      ); 

現在,我創建了房間,我想將消息發送到特定房間的用戶。

我想下面的代碼,但不工作

socket.get('room', function(err, room) { 
     chat_room.sockets.socket(room)(user).emit(
       'chat', 
       { 
        message : message, 
        from : sockets[socket.id].username 
       } 
      ); 

}); 

它的錯,它給了我一個錯誤:

C:\Users\Niraj\Desktop\node\joomla-chat\app.js:62 chat_room.sockets.socket(room)(user).emit( ^TypeError: object is not a function at chat_room.sockets.on.socket.on.socketID (C:\Users\Niraj\Desktop\node\joomla-chat\app.js:62:45) at Client.get (C:\Users\Niraj\Desktop\node\joomla-chat\node_modules\socket.io\lib\stores\memory.js:86:3) at Socket.get (C:\Users\Niraj\Desktop\node\joomla-chat\node_modules\socket.io\lib\socket.js:258:14) at Socket.chat_room.sockets.on.socket.on.socketID (C:\Users\Niraj\Desktop\node\joomla-chat\app.js:48:16) at Socket.EventEmitter.emit [as $emit] (events.js:96:17) at SocketNamespace.handlePacket (C:\Users\Niraj\Desktop\node\joomla-chat\node_modules\socket.io\lib\namespace.js:335:22) at Manager.onClientMessage (C:\Users\Niraj\Desktop\node\joomla-chat\node_modules\socket.io\lib\manager.js:487:38) at WebSocket.Transport.onMessage (C:\Users\Niraj\Desktop\node\joomla-chat\node_modules\socket.io\lib\transport.js:387:20) at Parser. (C:\Users\Niraj\Desktop\node\joomla-chat\node_modules\socket.io\lib\transports\websocket\hybi-16.js:39:10) at Parser.EventEmitter.emit (events.js:96:17)

我怎樣才能將消息發送到房間的特定用戶

- - - - - - - - - - - - - - - -編輯 - - - - - - - - - ---------- 所以如果我這樣做:

socket.get('room', function(err, room) { 
       chat_room.sockets.socket(user).emit(
        'chat', 
        { 
         message : message, 
         from : sockets[socket.id].username 
        } 
       ); 

     }); 

那麼這將觸發消息,X先生到ABC房間

我說得對不對?

+0

變量'user'是什麼?你如何與他們聯繫將取決於你有什麼信息(例如,如果你有他們的socket.id,它將只是一個簡單的socket.emit) – Ari

+0

其郵件交付對象的人的插座ID –

+1

在那你只需要爲該用戶做一個socket.emit;不要緊,他們在一個房間裏,傳統的發射仍將工作相同 – Ari

回答

7

無論您想要聯繫的用戶是否在房間內,只要您擁有正確的身份信息,最簡單的聯繫方式仍然只是一個簡單的socket.emit()。

你說你已經有他們的socket.id;如果是這樣,那麼獲取它們的套接字對象就像:io.sockets.sockets[socket.id]

要發送消息,那麼你可以說:io.sockets.sockets[socket.id].emit('identifier', data);

這應該回答你的問題,雖然這是兩個額外的事情,你可能會發現有用:

- 要廣播給你正專注於整個房間:io.sockets.in('room').emit('event_name', data)

- 關於存儲在io.sockets中的房間和連接套接字的信息非常豐富。我強烈建議您在代碼的開頭放置一個console.log(io.sockets);,並仔細檢查對象以查看您還可以訪問哪些內容。

希望這會有所幫助!

+0

謝謝,現在我清楚,如果我有相反用戶的套接字ID,那麼無論他是否在這個房間或任何其他房間會導致套接字ID將幫助他觸發該信息 –

相關問題