【发布时间】:2020-07-31 00:27:33
【问题描述】:
我目前正在使用 node.js,使用 socket.io 库来实现一个简单的聊天应用程序。在这个应用程序中,出于不相关的原因,我想设置一个系统,在该系统中客户端可以向服务器请求一条信息。然后服务器将此请求广播到所有其他在线套接字,如果它们有答案,它们将响应。然后,服务器最终将它收到的(第一个)响应返回到发出请求的原始客户端套接字。
当然,客户端可能会收到多个响应,而只需要一个。因此,一旦收到一个,就应该丢弃其他的。但是,感觉我应该使用某种同步的数据结构/代码来确保“如果已收到答案”的检查按预期工作。
我已经对这个主题进行了一些搜索,但我看到过几次提到使用事件驱动模型并且不需要任何同步代码/数据结构的 node.js,因为没有多个线程。这是真的?我的场景是否不需要对同步进行任何特别关注,它会起作用吗?或者我是否需要使用一些同步方法,如果需要,使用哪些方法?
代码示例:
socket.on('new_response', async data => {
await processResponse(data)
});
由于我正在使用加密,我必须使用 async/await,这使事情变得更加复杂。 processResponse 函数检查是否已经收到响应,如果没有,则处理它,否则忽略它。
【问题讨论】:
标签: node.js socket.io synchronization thread-safety