2016-11-29 115 views
3

我在使用我的聊天应用程序时遇到问题,我需要能够向特定用户发送私人消息,我可以选择特定的用户,但由于某种原因无法找到了解如何发送私人消息。与socket.io的私人聊天

下面你会发现我的服务器代码,请大家帮忙:

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 = [], 
 
\t connections = []; 
 
var onlineClients = {}; 
 

 

 

 

 
// Register events on socket connection 
 
io.on('connection', function(socket){ 
 
\t connections.push(socket); 
 
\t // console.log("connected socket", connections); 
 

 
\t socket.on("disconnect", function() { 
 
\t \t users.splice(users.indexOf(socket.username), 1); 
 
\t \t updateUsernames(); 
 
\t \t connections.splice(connections.indexOf(socket), 1); 
 
\t \t console.log("disconnected socket", connections.length) 
 
\t }); 
 

 
\t socket.on("send message", function(data) { 
 
\t \t // console.log(data); 
 
\t \t io.emit("new message", {msg: data, user: socket.username}); 
 
\t }); 
 

 

 
\t socket.on("notify user", function(data) { 
 
\t \t io.emit("notify user", {user: socket.username}) 
 
\t }); 
 

 

 
\t socket.on("new user", function(data) { 
 
\t \t socket.username = data; 
 
\t \t users.push(socket.username); 
 
\t \t updateUsernames(); 
 

 
\t }); 
 

 
\t function updateUsernames() { 
 
\t \t io.emit("get users", users); 
 
\t }; 
 

 
\t socket.on("private", function(data, recipientName) { 
 
\t \t var recipient = connections.filter(function (recipient) { 
 
\t \t \t return recipient.username === recipientName; 
 
\t \t })[0]; 
 
\t \t \t console.log(recipient.id); 
 
\t \t \t console.log(data); 
 
\t \t io.sockets.socket(recipient.id).emit("received private msg", data); 
 

 
\t }); 
 

 

 
\t // socket.on("create room", function(room) { 
 
\t // \t socket.join(room); 
 
\t // \t io.sockets.in(room).emit('event', "hey wusup am in this room"); 
 
\t // \t console.log(socket); 
 

 
\t // }) 
 

 
}); 
 

 
http.listen(PORT, function(){ 
 
    console.log('Server started on port ' + PORT); 
 
});

+0

做一个私人房间,然后将消息发送给该房间内的某个用户 – Adiii

+0

客户端只向服务器发送消息。如果您希望客户端向特定用户发送消息,那么您会向服务器发送消息,并告诉服务器您希望服务器将其提供给哪个用户。 – jfriend00

回答

1
  • 首先添加用户在聊天室这样就容易在您的私人聊天查找用户房间
  • 您的客户端代码加入私人房间

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

  • 你的JavaScript代码在客户端

    function a(){ io.emit('privatechatrrom', {email:document.getElementById('user_email').value}); }

  • 你的服务器端代码在你的房间添加用户

    socket.on('privatechatroom',function(data){ socket.join(data.email); io.emit('res',{mes:"you are added"}) });

现在ü可以发送私人给最近添加到这个房间的那个人的消息 客户端

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); 
}); 
+0

感谢Adil的帮助,但不知道这可以适用于我的情况,我通过向该特定用户添加单击事件将私人消息发送给客户端,我能够获得该ID但无法弄清楚如何发送消息,我尝试了不同的东西,我知道我应该改变一些在服务器端: – cickStar

+0

哦,不要紧,谢谢它的作品:) – cickStar

+0

ü欢迎@ZaimSofia – Adiii