【问题标题】:How to create dynamic socket rooms using socket.io如何使用 socket.io 创建动态套接字房间
【发布时间】:2018-12-11 13:53:35
【问题描述】:

我想使用 socket.io 实现多个聊天,我可以使用一个 socket.room 实现一对一聊天,但我想创建多个 socket 房间以与多人并行聊天

以下是我在 git 中获得的示例,但我无法理解它如何用于多个聊天,任何人都可以解释一下
服务器端

io = socketio.listen(server);

// handle incoming connections from clients
io.sockets.on('connection', function(socket) {
// once a client has connected, we expect to get a ping from them 
saying what room they want to join
socket.on('room', function(room) {
    socket.join(room);
});
});

// now, it's easy to send a message to just the clients in a given 
room
room = "abc123";
io.sockets.in(room).emit('message', 'what is going on, party 
people?');

 // this message will NOT go to the client defined above
 io.sockets.in('foobar').emit('message', 'anyone in this room yet?');

客户端

  // set-up a connection between the client and the server
 var socket = io.connect();

 // let's assume that the client page, once rendered, knows what room 
 it wants to join
 var room = "abc123";

 socket.on('connect', function() {
 // Connected, let's sign-up for to receive messages for this room
 socket.emit('room', room);
  });

 socket.on('message', function(data) {
  console.log('Incoming message:', data);
 });

【问题讨论】:

    标签: javascript node.js socket.io


    【解决方案1】:

    想象一个用户有多个聊天室可供选择。当他点击一个特定的房间时,他会得到它的信息:在这个例子中是 ChatRoom1。 客户端socket(属于点击这个房间的用户)必须先加入这个房间 → 所以这就是我们拥有的原因:

    socket.emit(room, ChatRoom1) 
    

    //另一方面,服务器端将把这个客户端的socket id添加到这个房间:

    socket.on('room', function(room) {
        socket.join(room);
    });
    

    现在,如果您想向属于特定房间的所有套接字发送消息,请在服务器部分使用此命令:

     io.sockets.in(ChatRoom1).emit('message', 'what is going on, party 
    people?');
    

    → 实际上这个命令只是向属于 ChatRoom1 的所有套接字发送一条消息

    → 基本上,Room 只是一个 socketId 数组

    所以现在在客户端你有这个:

     socket.on('message', function(data) {
      console.log('Incoming message:', data);
     });
    

    这只是一个监听器,您将进入控制台日志: 传入消息:发生了什么事,聚会的人?

    当您进入聊天室时,您的套接字会加入一个房间并会监听每个事件,直到您要求套接字离开房间

    所以现在您可以想象,在您的消息中,您有您的 Id 、您的房间 ID 和您的内容,当您发送它时,服务器会知道将其发送到哪里。

    示例: 信息: { 内容:'blabla', 用户:我, 日期:现在, 房间号:ChatRoom1 }

    在客户端每次用户发送消息时: socket.emit('sendMessage', 消息)

    在服务器端:

    socket.on('sendMessage', function(message){
    io.sockets.in(message.RoomId).emit('message', message);
    })
    

    【讨论】:

    • 您好,需要更多信息,请回复
    • 不明白的地方能不能详细点,谢谢
    • consiter X 和 Y 以及 Z 和 D 是 4 个用户,都在线......不告诉我 X 是如何同时聊天 Y、Z、D 的......就像 facebook
    • 我编辑我的答案抱歉延迟。之后你可以在网上找到大量的教程。
    猜你喜欢
    • 2013-10-18
    • 2020-01-10
    • 2019-09-20
    • 2016-05-08
    • 1970-01-01
    • 1970-01-01
    • 2017-08-24
    • 2013-10-10
    • 2013-10-09
    相关资源
    最近更新 更多