Я хочу надіслати дані на один конкретний ідентифікатор сокета.
Раніше ми могли робити це в попередніх версіях:
io.sockets.socket(socketid).emit('message', 'for your eyes only');
Як би я зробив щось подібне в Socket.IO 1.0?
Я хочу надіслати дані на один конкретний ідентифікатор сокета.
Раніше ми могли робити це в попередніх версіях:
io.sockets.socket(socketid).emit('message', 'for your eyes only');
Як би я зробив щось подібне в Socket.IO 1.0?
Відповіді:
У socket.io 1.0 вони забезпечують кращий спосіб для цього. Кожна розетка автоматично приєднується до кімнати за замовчуванням за допомогою ідентифікатора. Перевірка документів: http://socket.io/docs/rooms-and-namespaces/#default-room
Таким чином, ви можете видати в сокет за допомогою ідентифікатора наступний код:
io.to(socketid).emit('message', 'for your eyes only');
У socket.io 1.0 ви можете зробити це за допомогою наступного коду:
if (io.sockets.connected[socketid]) {
io.sockets.connected[socketid].emit('message', 'for your eyes only');
}
Оновлення:
Відповідь @ MustafaDokumacı містить краще рішення.
@Mustafa Dokumacı та @Curious вже надали достатньо інформації, я додаю, як ви можете отримати ідентифікатор сокета.
Щоб отримати ідентифікатор сокета, використовуйте socket.id :
var chat = io.of("/socket").on('connection',onSocketConnected);
function onSocketConnected(socket){
console.log("connected :"+socket.id);
}
Якщо ви використовували простір імен, я виявив, що працює наступне:
//Defining the namespace <br>
var nsp = io.of('/my-namespace');
//targeting the message to socket id <br>
nsp.to(socket id of the intended recipient).emit('private message', 'hello');
Докладніше про простори імен: http://socket.io/docs/rooms-and-namespaces/
Я вважаю, що і @Curious, і @ MustafaDokumacı надали рішення, які добре працюють. Однак різниця полягає в тому, що за рішенням @ MustafaDokumacı повідомлення транслюється до кімнати, а не лише до конкретного клієнта.
Різниця помітна, коли вимагається підтвердження.
io.sockets.connected[socketid].emit('message', 'for your eyes only', function(data) {...});
працює як очікувалось, поки
io.to(socketid).emit('message', 'for your eyes only', function(data) {...});
не вдається з
Error: Callbacks are not supported when broadcasting
у Node.js -> socket.io -> є приклад чату для завантаження Вставте це в рядок (io при підключенні) частина .. я використовую цей код, який працює на 100%
io.on('connection', function(socket){
socket.on('chat message', function(msg){
console.log(socket.id);
io.to(socket.id).emit('chat message', msg+' you ID is:'+socket.id);
});
});