node.js - 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() 函数,但我不想删除与该事件名称关联的所有事件 - 只是为该特定调用创建的事件。并且可能有多个调用同时等待同一事件 - 当其中一个执行时,不希望删除所有侦听器。
有任何想法吗?谢谢!
解决方案
您将执行同步长拉,并破坏 socket.io 的目的
推荐阅读
- c++ - 如何在 Tensorflow C++ 中有效地复制一行
- python - 你现在能解释一下这行得通吗?Python Numpy.arrays 使用常规列表
- javascript - 在不更新的情况下查看页面上的更改
- android - 如何在 Android Studio 上冷启动运行 API 27+ 的模拟器?
- c++ - 在 C++ 中的二维数组中添加行和列
- python - Django modelform 没有插入数据
- c++ - 调用非静态函数作为谓词?
- events - Roblox 触摸事件仅适用于脚
- java - Java:如何查看字符串池中存储了多少字符串?
- python - mrjob add_file_arg() csv 文件