【发布时间】:2019-02-08 07:32:10
【问题描述】:
我是 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?但是当服务器宕机时如何恢复呢?
- 我使用 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字段吗?
【问题讨论】: