gpt4 book ai didi

javascript - Socket.IO 客户端在回来时接收离线消息

转载 作者:IT老高 更新时间:2023-10-28 23:08:09 29 4
gpt4 key购买 nike

环境:

Nodejs+Socketio

问题:

  1. 客户端 A 和客户端 B 都连接到服务器;
  2. 客户端 B 离线;
  3. 客户端 A 向客户端 B 发送消息(客户端 B 仍处于离线状态);
  4. 客户端 B 再次连接服务器;
  5. [问题]客户端B收不到A发来的消息;

服务器代码

var clients = {};
io.sockets.on('connection', function (socket) {
socket.on('online', function (data) {
if (!clients[data.username]) {
clients[data.username] = socket;
}
io.sockets.emit('message', data.user + 'online now');
});
socket.on('say', function (data) {
if (data.to == 'all') {
io.sockets.emit('message', data.message);
} else { //to specific client
clients[data.to].emit('message', data.message);
}
});
});

说明

客户端B首先连接到一个地方的服务器。在客户端B离线期间,客户端A向客户端B发送消息。然后客户端B再次连接到另一个地方的服务器,客户端B需要从客户端接收这些消息A. 如何让它发挥作用?

最佳答案

如果我考虑哪个数据库及其配置和客户端,我必须编写的代码量将相当大,以创建解决方案。您基本上必须将消息保存在数据库中。当消息进入时,您必须写入您的对话对象(或代表客户端之间聊天消息的任何内容)。

socket.on('say', function (data) {
// pseudo code to save conversation
// var conversation = db.getConversation();
// conversation.addMessage(data.message);
// conversation.save();
if (data.to == 'all') {
io.sockets.emit('message', data.message);
} else { //to specific client
clients[data.to].emit('message', data.message);
}
});

然后,当客户端加入时,您必须从数据库中获取所有消息。

socket.on('online', function (data) {
if (!clients[data.username]) {
clients[data.username] = socket;
}
// pseudo code to get messages and display to user on first load
// var conversation = db.getConversation();
// var messages = conversation.getLast10Messages();
// messages.forEach(function(message) {
// clients[data.username].emit('message', message);
// });
io.sockets.emit('message', data.user + 'online now');
});

关于javascript - Socket.IO 客户端在回来时接收离线消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26644990/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com