最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

Socket.io,Mongodb

IT培训 admin 2浏览 0评论

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);
    });
});

现在我坚持:

  1. 如何管理那里的房间和人?如何创建动态roomId? Socket.io有socket.rooms(包含socket.idroomId),但每次用户加载或重新加载页面时,都会生成一个新的socket.id,因此我无法使用它。当用户与某人交谈时,他们会创建一个新房间。我不知道如何通知服务器创建roomId。

示例:有三个客户端:A,B,C。

想和B交谈,所以服务器必须为A和B创建一个房间。

想和C交谈,所以服务器必须为A和C创建一个房间。

当有人断开然后重新连接时,如何将它们连接到现有的房间?使用session,variable或db来存储roomId?但是当服务器被击落时如何恢复呢?

  1. 我使用Mongodb作为我的数据库,其中包含两个集合:userdialog。我坚持组织dialog的数据库结构。我使用 { _id: string, sender: { id: string, name: string }, receiver: [ { id: string, name: string }, { id: string, name: string }, ... ], msg: string, created: time } 但是现在人们可以在一个组中,我应该添加group字段吗?
回答如下:
  1. 您可以创建一个变量qazxsw poi,然后将qazxsw poi分配给每个新房间,这样每个房间的id将比最后一个大1。
  2. 客户可以存储它在lastId中加入的roomId,因此它将被记住。
  3. 不要在.on(“连接”),创建按钮或创建房间的东西中创建房间,如果在lastId++中找到id,则可能只自动加入房间
  4. 可能需要组字段来仅查询有用的消息

有用的链接:

  • 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);
    });
});

现在我坚持:

  1. 如何管理那里的房间和人?如何创建动态roomId? Socket.io有socket.rooms(包含socket.idroomId),但每次用户加载或重新加载页面时,都会生成一个新的socket.id,因此我无法使用它。当用户与某人交谈时,他们会创建一个新房间。我不知道如何通知服务器创建roomId。

示例:有三个客户端:A,B,C。

想和B交谈,所以服务器必须为A和B创建一个房间。

想和C交谈,所以服务器必须为A和C创建一个房间。

当有人断开然后重新连接时,如何将它们连接到现有的房间?使用session,variable或db来存储roomId?但是当服务器被击落时如何恢复呢?

  1. 我使用Mongodb作为我的数据库,其中包含两个集合:userdialog。我坚持组织dialog的数据库结构。我使用 { _id: string, sender: { id: string, name: string }, receiver: [ { id: string, name: string }, { id: string, name: string }, ... ], msg: string, created: time } 但是现在人们可以在一个组中,我应该添加group字段吗?
回答如下:
  1. 您可以创建一个变量qazxsw poi,然后将qazxsw poi分配给每个新房间,这样每个房间的id将比最后一个大1。
  2. 客户可以存储它在lastId中加入的roomId,因此它将被记住。
  3. 不要在.on(“连接”),创建按钮或创建房间的东西中创建房间,如果在lastId++中找到id,则可能只自动加入房间
  4. 可能需要组字段来仅查询有用的消息

有用的链接:

  • localStorage:localStorage

与本文相关的文章

发布评论

评论列表 (0)

  1. 暂无评论