tutorial socket query example error javascript node.js socket.io send broadcast

javascript - query - El socket IO se envía a la ID de usuario especificada



socket io tutorial (2)

Creo que la pieza que falta para ti está dentro de esta función: io.sockets.on(''connection'', function(socket) { ... }); - Esa función se ejecuta cada vez que hay un evento de conexión. Y cada vez que se desencadena ese evento, el argumento ''socket'' hace referencia a un nuevo objeto de socket, que representa al usuario recién conectado. Luego debe almacenar ese objeto de socket en algún lugar de manera que pueda buscarlo más tarde, para llamar al método de envío o emisión, si necesita enviar mensajes que serán vistos solo por ese socket.

Aquí hay un ejemplo rápido que debería comenzar. ( Nota : no he probado esto, ni recomiendo que sea la mejor manera de hacer lo que intenta hacer. Lo acabo de escribir en el editor de respuestas para darle una idea de cómo podría hacer lo que Estoy buscando hacerlo)

var allSockets = []; io.sockets.on(''connection'', function(socket) { var userId = allSockets.push(socket); socket.on(''newChatMessage'', function(message) { socket.broadcast.emit(''newChatMessage_response'', {data: message}); }); socket.on(''privateChatMessage'', function(message, toId) { allSockets[toId-1].emit(''newPrivateMessage_response'', {data: message}); }); socket.broadcast.emit(''newUserArrival'', ''New user arrived with id of: '' + userId); });

Editar: si por id. Te estás refiriendo al valor de id que asigna socket.io, no un valor que hayas asignado, puedes obtener un socket con un valor de id específico usando var socket = io.sockets.sockets[''1981672396123987'']; (Sintaxis anterior probada usando socket.io v0.7.9)

Deseo enviar datos al usuario especificado y a nadie más.

actualmente para transmitir a todos los que hago:

socket.on(''newChatMessage'', function (message) { socket.broadcast.emit(''newChatMessage_response'', { data: message}); });

ahora lo que quiero hacer es simplemente algo como:

socket.on(''newChatMessage'', function (message) { socket.to(5).send(''newChatMessage_response'', { data: message}); });

a (5) sería el usuario con la ID de 5.


Es difícil decir exactamente cómo hacer esto sin ver el código completo, pero parece que quieres llamar al método de emit en el socket individual al que estás tratando de enviar. Si esto es diferente del socket que hace la conexión (es decir, un compañero de chat privado), entonces necesitará otra forma de almacenar y recuperar el socket correcto con el que está tratando de comunicarse.

var sck = someFunctionToGetAppropriateSocketObject(); sck.emit(''newChatMessage_response'', { data: message});

ver http://socket.io/#how-to-use y https://github.com/learnboost/socket.io