如何使用nodejs socket.io向特定房间中的用户发送打字警报和消息

Posted

技术标签:

【中文标题】如何使用nodejs socket.io向特定房间中的用户发送打字警报和消息【英文标题】:how to send typing alert and message to users in a particular room using nodejs socket.io 【发布时间】:2020-09-17 11:02:29 【问题描述】:

通过向所有连接的用户广播打字通知聊天消息,下面的代码可以正常工作。

这就是我想要的:如何仅向连接到特定房间的用户发送打字通知和聊天消息 比如 Room1、Room2 等。

这里是代码

index.html

var socket = io(); 
var user = 'nancy';
function submitfunction()
  var from = 'nancy';
  var message = 'hello Nancy';
  socket.emit('chatMessage', from, message);


function notifyTyping() 
  var user = 'nancy' 
  socket.emit('notifyUser', user);


socket.on('chatMessage', function(from, msg)
  //sent message goes here
);

socket.on('notifyUser', function(user)
    $('#notifyUser').text(nancy is typing ...');
  setTimeout(function() $('#notifyUser').text(''); , 10000);
);

server.js

var io = require('socket.io')(http);
io.on('connection', function(socket) 
  socket.on('chatMessage', function(from, msg)
    io.emit('chatMessage', from, msg);
  );


  socket.on('notifyUser', function(user)
    io.emit('notifyUser', user);
  );
);

我正在使用 npm 安装 socket.io ^2.3.0

【问题讨论】:

【参考方案1】:

要将消息发送到特定房间,您必须使用 roomId 创建并加入房间。下面是一个基本的代码sn -p

//client side
const socket = io.connect();
socket.emit('create', 'room1');

// server side code
  socket.on('create', function(room1) 
    socket.join(room1);
  );

To emit data to a specific room 

// sending to all clients in 'room1'except sender
  socket.to('room1').emit('event',data);

// sending to all clients in 'room1' room, including sender
 io.in('room1').emit('event', 'data');

您可以关注这个问题来详细了解如何创建房间?

Creating Rooms in Socket.io

这个emit 备忘单也可能有用: https://github.com/socketio/socket.io/blob/master/docs/emit.md

【讨论】:

谢谢桑迪普。我试试看

以上是关于如何使用nodejs socket.io向特定房间中的用户发送打字警报和消息的主要内容,如果未能解决你的问题,请参考以下文章

使用 socket.io 防止向多个房间发送消息

NodeJs Socket.io Rooms

如何在socket.io nodejs服务器上列出房间

socket.io 1.0.0^:使用默认房间与自定义房间进行用户特定的通信

向 Socket.io 中的其他房间发送消息

socket.io 只向房间 A 和 B 中的用户广播