发送私人消息(Socket.IO)
在许多帖子或文章中,我经常看到类似的事情发送私人消息(Socket.IO),socket.io,Socket.io,在许多帖子或文章中,我经常看到类似的事情 Client-Side : socket.emit("shhh!Secrets", { To : "AlexId", Message : "Hello World!" }) 无论是socketId,特定用户socketObj或room基地 如果我更改客户端源代码并与其他人一起更改room或socketId,那么我的疯狂消息将保存到其他人的聊天时间线…第一种方法 Socket.IO是有状态的。因此,此智能插座不会在每次事件呼叫中忘记您是谁
Client-Side :
socket.emit("shhh!Secrets", {
To : "AlexId",
Message : "Hello World!"
})
无论是socketId
,特定用户socketObj
或room
基地
如果我更改客户端源代码并与其他人一起更改
room
或socketId
,那么我的疯狂消息将保存到其他人的聊天时间线…第一种方法
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);
})
Mohammed,当然你可以修改你的客户端代码,但是你需要知道真实的用户ID(在你的例子中是AlexId),它通常是uuid,这不容易得到。。。所以这样做的机会很小
顺便说一句,通常在文章中使用非常简单的示例,并且不提及安全方面,因此请小心使用 我对房间使用mongo dB default\u id。所以,如果我增加最后一个数字。这将是其他聊天室。正如我前面所说,这是潜在的漏洞。您需要检查用户的访问权限和写入空间。。。
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);
})