我目前正在开始使用node.js,并且作为第一个小项目决定编写一个小聊天应用程序。我正在使用socket.io
并且已经按照http://socket.io/get-started/chat/上的聊天教程进行了操作。现在我想扩展脚本,但我被卡住了。
我无法理解socket.io是如何(或者根本不是)管理服务器端的所有连接客户端。我可以使用io.emit
函数向所有连接的用户发送消息。但是,如果我想向某个特定用户发送消息怎么办?
我当然可以通过向所有客户端发送消息然后在客户端检查标识符等来“伪造”它,并且仅在匹配时处理消息。但是这仍然会向所有人发送消息,并且很容易被JS知识最少的用户规避。
出于安全原因,需要在服务器端进行“过滤”/“定位”。但我没有看到/理解socket.io实际上是如何管理所有客户端连接(或者根本不知道)。有没有办法获得所有当前连接客户的列表?您可以在循环中对所有连接的客户端进行交互吗?您可以为连接分配自定义标识符/名称吗?而且 - 作为实际应用 - 您可以向单个连接用户发送/发送消息吗?
答案 0 :(得分:1)
在建立新连接时,每个套接字连接都有一个唯一的套接字ID。您可以使用该特定ID发出数据。
var socketId=socket.id;
socket.broadcast.to(socketId).emit("messageToReceiver",data);
因此,您可以将其发送给特定的人。
要让所有连接的客户端检查此URL: Socket.IO - how do I get a list of connected sockets/clients?