【问题标题】:What is the scope of socket.emit()?socket.emit() 的作用域是什么?
【发布时间】: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


【解决方案1】:

根据您的要求,用户只向服务器发送数据。在客户端使用 emit 事件,在服务器中使用 on 事件,方法相同。

客户

客户端发射方法

socket.emit('DataClientToServer',{data : 'hello'});

客户端on方法,从服务器获取数据

socket.on('DataServerToClient',function(data){
            console.log(data);
        });

服务器

服务器 on 方法,仅使用 socket.id

获取该数据并将数据发送到该客户端
socket.on('DataClientToServer', (data) => {
            console.log(data);
            //Send data to that client only using socket.id
            io.to(socket.id).emit('DataServerToClient',{data : 'Server to Client'});
        });

对于检测哪些用户发送数据,您发送额外的数据,例如用户唯一的 usernameuseridobjectid 等。

不是每个用户都需要空间。

希望对您有所帮助。

【讨论】:

  • 从客户端向服务器发送消息没有问题。一行中的问题是,如何发送消息(服务器到客户端)以使消息仅发送给将消息发送到服务器的客户端?我已经更新了这个问题。希望它清除。
猜你喜欢
  • 2012-01-27
  • 2015-01-25
  • 2016-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-05
  • 2021-11-24
  • 1970-01-01
相关资源
最近更新 更多