首页 > 解决方案 > Node JS Socket.io:在发出()之后是否可以等待连接另一端的回复?

问题描述

有没有人熟悉在发出消息后设置 Socket.io 以等待来自连接另一端的响应的方法?

例如:客户端 (A) 向服务器 (B) 发出事件,并等待服务器 (B) 发出事件以响应此事件,然后再继续。如果 X 秒内没有收到响应,则执行超时函数或返回默认值。

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

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

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

有任何想法吗?谢谢!

标签: node.jssocket.io

解决方案


您将执行同步长拉,并破坏 socket.io 的目的


推荐阅读