我是node.js的新手。我正在创建一个聊天应用。我想管理4个连接到房间的用户。我在会话中有登录用户User A
的主键,我也可以将其保存在隐藏文件中。当页面加载时,我只有一个套接字连接到服务器(即User A
的套接字)。当user A
想与User B
聊天时,我有一个textarea消息,一个div来显示聊天消息的历史记录和一个发送按钮。
如何让user A
与N个用户聊天,并跟踪谁在聊天?
我正在考虑使用以下方法来跟踪聊天消息,
将两个用户主键保存在隐藏字段中。当用户A发送消息时 用户B.将用户A和B的PK连同消息一起发送到服务器 将其保存在数据库中。
...或
有没有办法识别用户B的套接字。这样保存/处理 可以避免用户A和B在客户端的主要用户。
答案 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" }");
});
});