节点JS Socket.io:是否可以在emit()之后等待连接另一端的答复?

时间:2018-10-23 15:08:20

标签: node.js socket.io

是否有人熟悉设置Socket.io的方式,以便在发出消息后等待连接另一端的响应?

例如: 客户端(A)向服务器(B)发出事件,并响应于此而从服务器(B)发出事件,然后继续。如果X秒钟内未收到响应,请执行超时功能或返回默认值。

使用情况:类似于socketio-auth,客户端连接到socket.io服务器,并且必须通过在X秒内发出“ authenticate”事件来进行身份验证,否则将被断开连接。但是,我正在寻找一种更通用的情况,我可以创建类似awaitReply()的函数,该函数将与数据一起发出一个事件,并等待远程服务器发出的另一个事件,并返回该事件中包含的数据。 / p>

我意识到HTTP请求/响应周期可能是实现此目的的更好方法,但是Promises似乎可行:执行setTimeout()并在超时到期时简单地拒绝诺言,并创建一个io。当等待的事件在本地触发时,on()侦听器可以解析承诺。

我不确定的一件事:事件触发后如何关闭io.on()侦听器。是的,有一个io.off()函数,但是我不想删除与该事件名称关联的所有事件-只是为该特定调用创建的事件。同一事件可能同时等待多个调用-当它们之一执行时,不想删除所有监听器。

有什么想法吗?谢谢!

1 个答案:

答案 0 :(得分:0)

您将执行同步长拉,并达到了socket.io的目的