2016-02-28 4 views
12

Я использую Socket IO v1.4.5 и пробовал 3 разных способа, но не получил никакого результата.Отправка сообщения конкретному клиенту в Socket IO

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'); 
}); 

Любая помощь будет great.Thanks для help.Kind Regard

ответ

70

Чтобы отправить сообщение для конкретного клиента вам нужно сделать, это как так :

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

Вот миленькая шпаргалка для розеток:

// 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. 

В противном случае, вы будете нуждаться, чтобы следить за каждым отдельным клиентам сокет-соединения, и если вы хотите общаться, вам придется искать, что разъемы подключения и испускают специально для этого, используя функцию Я сказал выше. Комнаты, вероятно, проще.

+0

Hi.So я просто нужно добавить, что линия на сайт сервера? И что-нибудь еще выглядит хорошо? –

+1

@ HoàngPhúcVũ Я не уверен на 100%, что вы пытаетесь выполнить в своем коде, вы говорите, что хотите отправить конкретное соединение сокета, но я не вижу попытки поиска идентификатора сокета и отправки им. – Datsik

+0

То, что я хочу, - это личное сообщение между 2 пользователями. Так что у вас есть предложение об этом случае.thanks for help –

0

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"); 
    } 
Смежные вопросы