node.js - chat privado con socket.io
(2)
- Primero agregue el usuario en la sala de chat para que sea más fácil encontrar un usuario en su sala de chat privada
El código del lado del cliente para unirse a la sala privada
<input type="text" class="form-control" id="user_email" placeholder="user_email" /> <button text="join room" class="btn btn-primary btn-block" onclick="a();"> Join Room</button>
su código de JavaScript en el lado del cliente
function a(){ io.emit(''privatechatrrom'', {email:document.getElementById(''user_email'').value}); }
el código del lado del servidor para agregar usuario en su habitación
socket.on(''privatechatroom'',function(data){ socket.join(data.email); io.emit(''res'',{mes:"you are added"}) });
ahora puede enviar un mensaje privado a esa persona que se agregó recientemente a este lado del cliente de la sala
function b()
{
io.emit(''sendmail'',{email:document.getElementById(''sender_mail'').value,message:document.getElementById(''message'').value});
$(''#message'').val('''');
}
/*serverside code*/socket.on(''sendmail'',function(data)
{
io.sockets.in(data.email).emit(''new_msg'', {msg: data.message});
console.log(data.email);
});
Tengo problemas con mi aplicación de chat, necesito poder enviar un mensaje privado a un usuario específico, pude seleccionar ese usuario específico pero por alguna razón no pude encontrar la manera de enviar el mensaje privado.
A continuación encontrará el código de mi servidor, por favor ayuda:
var express = require(''express'');
var app = express();
var PORT = process.env.PORT || 8000;
var http = require(''http'').Server(app); // this is a node server that uses express as the boiler plate
var io = require(''socket.io'')(http); // socket! pass our server as a parameter to it
// use express static to expose a folder
app.use(express.static(__dirname + ''/public''));
var users = [],
connections = [];
var onlineClients = {};
// Register events on socket connection
io.on(''connection'', function(socket){
connections.push(socket);
// console.log("connected socket", connections);
socket.on("disconnect", function() {
users.splice(users.indexOf(socket.username), 1);
updateUsernames();
connections.splice(connections.indexOf(socket), 1);
console.log("disconnected socket", connections.length)
});
socket.on("send message", function(data) {
// console.log(data);
io.emit("new message", {msg: data, user: socket.username});
});
socket.on("notify user", function(data) {
io.emit("notify user", {user: socket.username})
});
socket.on("new user", function(data) {
socket.username = data;
users.push(socket.username);
updateUsernames();
});
function updateUsernames() {
io.emit("get users", users);
};
socket.on("private", function(data, recipientName) {
var recipient = connections.filter(function (recipient) {
return recipient.username === recipientName;
})[0];
console.log(recipient.id);
console.log(data);
io.sockets.socket(recipient.id).emit("received private msg", data);
});
// socket.on("create room", function(room) {
// socket.join(room);
// io.sockets.in(room).emit(''event'', "hey wusup am in this room");
// console.log(socket);
// })
});
http.listen(PORT, function(){
console.log(''Server started on port '' + PORT);
});
Aquí está la solución clara mía para su pregunta ...
Enviar un mensaje a un cliente particular (chat privado)
Espero que funcione para ti.