Node.js Socket.io、Mongodb—实现聊天室和组织数据库的正确方法
我是Node.js新手,想用Socket.io构建一个聊天室。我可以实现简单的聊天功能,并希望对此进行改进。 为了便于想象,我想建立一个类似Facebook Messenger的聊天室,人们可以在其中与他人交谈或创建群聊。 我研究了很多话题,但不知道如何解决我的问题 有些人给了我一些这样的方法: 客户:Node.js Socket.io、Mongodb—实现聊天室和组织数据库的正确方法,node.js,mongodb,socket.io,Node.js,Mongodb,Socket.io,我是Node.js新手,想用Socket.io构建一个聊天室。我可以实现简单的聊天功能,并希望对此进行改进。 为了便于想象,我想建立一个类似Facebook Messenger的聊天室,人们可以在其中与他人交谈或创建群聊。 我研究了很多话题,但不知道如何解决我的问题 有些人给了我一些这样的方法: 客户: socket.on('connect', () => { socket.emit('join', roomId); // don't know how to create uniq
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房间ID
?但当服务器关闭时,如何恢复它们
user
和dialog
。我停留在对话框
的Organize db结构上。我用
{
_id:string,
发件人:{id:string,name:string},
接收人:[
{id:string,name:string},
{id:string,name:string},
...
],
msg:string,
创建:时间
}
但是现在人们可以在一个组中,我应该添加group
字段吗lastId
,然后向每个新房间分配一个lastId++
,这样每个房间的id都比上一个房间大1本地存储中
,因此它会被记住localStorage
- 本地存储:
lastId
,然后向每个新房间分配一个lastId++
,这样每个房间的id都比上一个房间大1本地存储中
,因此它会被记住localStorage
- 本地存储:
lastId
var将被删除如果服务器关闭如果一个用户向另一个用户发送消息,服务器应该自动为他们创建一个房间,但是如果我使用localStorage
,因为lastId
增加了值,每个用户都有不同的id!不要在connect上创建房间。一开始,如果在本地存储中找不到任何内容,用户不需要在任何房间。只有当用户想要创建房间时才创建房间(比如一个按钮或其他东西),你的意思是服务器创建房间,然后客户端保存它们lastId
var将被删除如果服务器关闭如果一个用户向另一个用户发送消息,服务器应该自动为他们创建一个房间,但是如果我使用localStorage
,因为lastId
增加了值,每个用户都有不同的id!不要在connect上创建房间。一开始,如果在本地存储中找不到任何内容,用户不需要在任何房间。仅在用户需要时创建房间(如按钮或其他)