Socket.io,Mongodb
我是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。
想和B交谈,所以服务器必须为A和B创建一个房间。
想和C交谈,所以服务器必须为A和C创建一个房间。
当有人断开然后重新连接时,如何将它们连接到现有的房间?使用session,variable或db来存储roomId
?但是当服务器被击落时如何恢复呢?
- 我使用Mongodb作为我的数据库,其中包含两个集合:
user
和dialog
。我坚持组织dialog
的数据库结构。我使用{ _id: string, sender: { id: string, name: string }, receiver: [ { id: string, name: string }, { id: string, name: string }, ... ], msg: string, created: time }
但是现在人们可以在一个组中,我应该添加group
字段吗?
- 您可以创建一个变量qazxsw poi,然后将qazxsw poi分配给每个新房间,这样每个房间的id将比最后一个大1。
- 客户可以存储它在
lastId
中加入的roomId,因此它将被记住。 - 不要在.on(“连接”),创建按钮或创建房间的东西中创建房间,如果在
lastId++
中找到id,则可能只自动加入房间 - 可能需要组字段来仅查询有用的消息
有用的链接:
- localStorage:
localStorage
Socket.io,Mongodb
我是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。
想和B交谈,所以服务器必须为A和B创建一个房间。
想和C交谈,所以服务器必须为A和C创建一个房间。
当有人断开然后重新连接时,如何将它们连接到现有的房间?使用session,variable或db来存储roomId
?但是当服务器被击落时如何恢复呢?
- 我使用Mongodb作为我的数据库,其中包含两个集合:
user
和dialog
。我坚持组织dialog
的数据库结构。我使用{ _id: string, sender: { id: string, name: string }, receiver: [ { id: string, name: string }, { id: string, name: string }, ... ], msg: string, created: time }
但是现在人们可以在一个组中,我应该添加group
字段吗?
- 您可以创建一个变量qazxsw poi,然后将qazxsw poi分配给每个新房间,这样每个房间的id将比最后一个大1。
- 客户可以存储它在
lastId
中加入的roomId,因此它将被记住。 - 不要在.on(“连接”),创建按钮或创建房间的东西中创建房间,如果在
lastId++
中找到id,则可能只自动加入房间 - 可能需要组字段来仅查询有用的消息
有用的链接:
- localStorage:
localStorage