节点js与同一房间内的多个用户聊天

时间:2015-05-10 07:50:48

标签: node.js sockets

我是node.js的新手。我正在创建一个聊天应用。我想管理4个连接到房间的用户。我在会话中有登录用户User A的主键,我也可以将其保存在隐藏文件中。当页面加载时,我只有一个套接字连接到服务器(即User A的套接字)。当user A想与User B聊天时,我有一个textarea消息,一个div来显示聊天消息的历史记录和一个发送按钮。

如何让user A与N个用户聊天,并跟踪谁在聊天?

我正在考虑使用以下方法来跟踪聊天消息,

  

将两个用户主键保存在隐藏字段中。当用户A发送消息时   用户B.将用户A和B的PK连同消息一起发送到服务器   将其保存在数据库中。

...或

  

有没有办法识别用户B的套接字。这样保存/处理   可以避免用户A和B在客户端的主要用户。

1 个答案:

答案 0 :(得分:0)

您可以将消息广播给所有连接的用户。

io.sockets.emit("method","Message");

或者您可以将消息发送到特定用户套接字

 io.sockets.socket(socketId).emit("method","Message");

此外,您可以将用户添加到连接上的特定房间

  io.sockets.on('connection', function (socket) {
  socket.join("RoomName");
  });

并向房间发送消息(消息将发送给所有加入的用户)

io.to('RoomName').emit("method","Message");

您可以在连接时获取用户的套接字ID,并将其保存到数组或数据库。

  io.sockets.on('connection', function (socket) {
  console.log( "User connected on " + socket.id);
  });

聊天应用程序:

Node.js是单线程应用程序。所以你将把所有连接的用户套接字对象存储在io.sockets中

 Step 1: Save socket id of user in to database on Connection 
 Step 2: Remove Socket id of user from database on connection
 Step 3: if socket id of user exist in database then this mean user is connected and you can send the message to user socket.

<强> Node.js的

// User Socket array storage 
var user_by_socket = [];
var socket_to_users = [];

   io.sockets.on('connection', function (socket) {

   // Save Socket Object
   user_by_socket[socket.id] = socket; 
   socket_to_user["Jhon"] = socket;

   user_by_socket[socket.id] = socket; 
   socket_by_user["David"] = socket;


   //Send Message 
   socket.on('send',function(data){

   // Sent by username
   socket_by_user["David"].emit("recieve","{ "From" : 'Jhon' , 'message' :  "Hello" }");

   //Sent by Socket Id
   user_by_socket["Socket ID"].emit("recieve","{ "From" : 'Jhon' , 'message' :  "Hello" }");


   });


   });