发送私人消息(Socket.IO)

时间:2020-04-08 19:57:34

标签: socket.io

在许多帖子或文章中,我经常看到类似的东西。

Client-Side :

 socket.emit("shhh!Secrets", {
  To : "AlexId",
  Message : "Hello World!"
 })
Server-Side: 

 socket.on("shhh!Secrets", (Send) => {
  io.in(Send.TO).emit("SO...Secrets", Send.Message)
 })

socketId,特定用户socketObjroom为基础。

如果我更改客户端源代码并与其他roomsocketId进行更改怎么办,那么我发疯的消息将保存到其他聊天时间线中...

2 个答案:

答案 0 :(得分:3)

第一种方法

Socket.IO是有状态的。因此,此智能套接字不会忘记每个事件调用中的您。

让用户说要加入 room001
因此,在将套接字连接到特定房间时,将RoomId保存到socket.roomId = "room001"

然后使用io.in(socket.roomId).emit("SO...Secrets", "message")

第二种方法

从不更改,客户直接将消息发送到特定房间。

Server-Side: 
  
 socket.on("shhh!Secrets", (Send) => {
  // Send message only if the user already joined to this Room
  if (Send instanceof Object && socket.rooms[Send.TO] === Send.TO) 
    io.in(Send.TO).emit("SO...Secrets", Send.Message);
 })

答案 1 :(得分:0)

穆罕默德(Mohammed),当然您可以更改客户端代码,但是您需要知道真实的userId(在您的示例中为AlexId),并且通常是uuid,不容易获得...因此,做到这一点。

顺便说一句,通常在文章中使用非常简单的示例,并且不提及安全性方面,因此请谨慎操作!