【发布时间】:2017-12-28 05:23:07
【问题描述】:
我们将Socket.IO 用于聊天应用程序。谁会收到通过socket.emit() 发送的消息?在here 上,它被给出为socket.emit() 将只向一个客户端发送一条消息。
我们的要求是实现一对一的通信(在用户和服务器之间,而不是在两个用户之间)。目前,我们正在为不同的用户创建单独的房间并使用io.in(room).emit() 发送消息。消息将发送给该房间中的每个人,根据我们的应用程序,一个房间将只有一个用户。
我们是否可以使用socket.emit() 创建一个单独的房间并设法响应特定的客户来实现同样的效果?
更新:-
为了更清楚,这里有一个场景。
五个不同的用户打开聊天框,每个人都向服务器提出不同的问题。我们创建了五个不同的房间(一个给用户)并使用io.in(room).emit()回复用户。
所以,实际上我们在这里所做的是,在服务器端,我们根据用户所在的房间来识别用户。这里有更好的方法吗?听说socket.emit() 只会回复一位客户,想知道这是否会缓解我们的问题。
【问题讨论】:
-
socket.emit()只向那个套接字发送一条消息。目前还不清楚你还问什么。io.in(room).emit()发送到该房间中的所有套接字。io.emit()发送到连接到 /(默认)命名空间的所有套接字。这些是您发送消息的主要选项。 socket.io 永远不会从一个用户发送给另一个用户。所有通信都在客户端和服务器之间。 -
确保保持客户端 socket.io 和服务器端 socket.io 的明确区别。服务器发送给一个客户端,或每个人,或除一个客户端之外的每个人(可能仅限于一个房间,可能仅限于一个命名空间)。客户端只发送到服务器,期间。
-
是的@Amadan。我们希望服务器仅将消息发送给向服务器请求某些内容的客户端。这样,当两个用户与服务器聊天时,服务器应该确保它不会为 user1 提供 user2 提出的问题的答案。
-
在客户端,我们使用 socket = io() 创建套接字。那么,根据@jfriend00 的评论,这是否意味着在服务器端使用 socket.emit() 只会将消息发送给创建套接字的特定客户端?
-
socket.emit()仅发送到该特定套接字。如果您在客户端,则将其发送到服务器。如果您在服务器中,那么您将发送到该特定客户端(与该套接字对象关联的客户端)。服务器可以访问许多不同的套接字对象(每个连接到它的客户端一个)。
标签: javascript node.js socket.io chatbot