我是Node.js的新手,想与Socket.io建立一个聊天室。我可以实现简单的聊天,并希望对此进行改进。 为了易于想象,我想建立一个像Facebook Messenger这样的聊天室,人们可以在其中聊天或建立群聊。 我研究了许多主题,但不了解如何解决我的问题。
有些人给我这样的方式:
客户:
socket.on('connect', () => {
socket.emit('join', roomId); // don't know how to create unique roomId
// that server can grab it
});
btnSend.addEventListener('click', () => {
// data: { senderId: [string], receiverId: [array of receiver], msg: [string] }
socket.emit('send message', data);
});
socket.on('new message', (data) => {
// append to body
});
服务器:
socket.on('join', (roomId) => {
socket.join(`room ${ roomId }`, () => {
console.log(`in room ${ roomId }`);
});
socket.on('send message', (data) => {
// save to db
socket.in(roomId).emit('new message', data);
});
});
现在我停留在:
roomId
?
Socket.io具有socket.rooms
(包含socket.id
和roomId
),但是每次用户加载或重新加载页面时,都会生成一个新的socket.id
,所以我无法使用它。当用户与某人交谈时,他们会创建一个新房间。我不知道如何通知服务器创建roomId。示例:有三个客户端:A,B,C。
A要与B交谈,因此服务器必须为A和B创建一个房间。
A要与C交谈,因此服务器必须为A和C创建一个空间。
当某人断开连接然后再次连接时,如何将他们连接到现有房间?使用会话,变量或数据库存储roomId
?但是当服务器宕机时如何恢复它们?
user
和dialog
。我停留在dialog
的组织数据库结构中。我用
{
_id: string,
sender: { id: string, name: string },
receiver: [
{ id: string, name: string },
{ id: string, name: string },
...
],
msg: string,
created: time
}
但现在人们可以分组了,我应该添加group
字段吗?答案 0 :(得分:0)
您可以创建一个变量lastId
,然后将lastId++
分配给每个新房间,因此每个房间的ID都比上一个大1。
客户端可以将其加入的roomId存储在localStorage
中,以便将其记住。
不要在.on(“ connect”)中创建会议室,不要创建按钮或创建会议室的内容,并且只有在localStorage
中找到ID的情况下,才可能自动加入会议室
可能仅需要一个组字段来查询有用的消息
有用的链接: