将消息发送到套接字IO中的特定客户端

我正在使用Socket IO v1.4.5,并尝试了以下3种不同的方式,但没有任何结果。

client.emit('test', 'hahahaha'); io.sockets.socket(id).emit('test',''hahaha); io.sockets.connected[id].emit('test','hahaha'); 

这是我的服务器端

 var socket = require( 'socket.io' ); var express = require( 'express' ); var http = require( 'http' ); var dateFormat = require('date-format'); var app = express(); var server = http.createServer( app ); var io = socket.listen( server ); io.sockets.on( 'connection', function( client ) { user[client.id]=client; //when we receive message client.on('message', function( data ) { console.log( 'Message received from' + data.name + ":" + data.message +' avatar' +data.avatar ); client.emit('test', 'hahahaha'); }); 

任何帮助将是伟大的。谢谢你的帮助

       

网上收集的解决方案 "将消息发送到套接字IO中的特定客户端"

要发送消息到特定的客户端,您需要这样做:

 socket.broadcast.to(socketid).emit('message', 'for your eyes only'); 

这里是一个很好的小插槽的sockets:

  // sending to sender-client only socket.emit('message', "this is a test"); // sending to all clients, include sender io.emit('message', "this is a test"); // sending to all clients except sender socket.broadcast.emit('message', "this is a test"); // sending to all clients in 'game' room(channel) except sender socket.broadcast.to('game').emit('message', 'nice game'); // sending to all clients in 'game' room(channel), include sender io.in('game').emit('message', 'cool game'); // sending to sender client, only if they are in 'game' room(channel) socket.to('game').emit('message', 'enjoy the game'); // sending to all clients in namespace 'myNamespace', include sender io.of('myNamespace').emit('message', 'gg'); // sending to individual socketid socket.broadcast.to(socketid).emit('message', 'for your eyes only'); 

感谢https://stackoverflow.com/a/10099325


最简单的方法,而不是直接发送到套接字,将为2个用户创造一个空间,并在那里自由发送消息。

 socket.join('some-unique-room-name'); // Do this for both users you want to chat with each other socket.broadcast.to('the-unique-room-name').emit('message', 'blah'); // Send a message to the chat room. 

否则,你将需要跟踪每个客户端套接字连接,当你想聊天时,你将不得不查找套接字连接,并使用我上面所说的函数专门发送到那个连接。 房间可能更容易。

Socket.io版本2.0.3+

发送消息到特定的套接字

  let namespace = null; let ns = _io.of(namespace || "/"); let socket = ns.connected[socketId] // assuming you have id of the socket if (socket) { console.log("Socket Connected, sent through socket"); socket.emit("chatMessage", data); } else { console.log("Socket not connected, sending through push notification"); }