私人聊天使用socket.io

8
我有一个聊天应用程序的问题,我需要能够向特定用户发送私人消息,我能够选择该特定用户,但是由于某种原因无法弄清如何发送私人消息。
以下是我的服务器代码,请帮忙:

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


创建一个私人聊天室,然后向该聊天室中的特定用户发送消息。 - Adiii
2
客户端只向服务器发送消息。如果您希望客户端将消息发送给特定用户,则需要向服务器发送消息,并告诉服务器要将其传递给哪个用户。 - jfriend00
2个回答

11
  • 首先将用户添加到聊天室,这样就更容易在您的私人聊天室中找到用户
  • 加入私人聊天室的客户端代码

<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('privatechatroom', {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);
    });
    

    2
    感谢 Adil 的帮助,但我不确定这对我的情况是否有效。我通过为特定用户添加单击事件来发送私人消息,我能够获取 ID,但无法弄清如何发送消息。我尝试了不同的方法,我知道我应该在服务器端更改一些内容。 - cickStar

    0

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接