NodeJS 如何在套接字IO和没有延迟的情况下回答两个请求

mtb9vblg  于 9个月前  发布在  Node.js
关注(0)|答案(2)|浏览(108)

当socketIO收到客户端的一个请求,我的响应是大量的记录,而同时另一个请求来到服务器,第二个请求的响应有一点延迟,实际上socketIO不能同时向客户端发送两个响应,有谁知道我的问题的解决方案是什么?
我通过sockei.on接收请求并使用socket.emit发送响应我有express和socket io的服务器

acruukt9

acruukt91#

套接字消息(服务器到客户端)不是“响应”。
在实时套接字编程中没有“响应”。
它们是两个方向的命令。
就这些了。
1.一个来自客户端的命令说“我需要最新的Map”。客户端->服务器命令可能是“need-new-map”(或者它可以只是一个数字,或者任何表示该命令的标记)。
1.没有“响应”,它只是来自客户端的传入命令。
1.您的服务器启动了一个构建Map的
后台进程**;假设构建一个Map需要100秒作为一个例子。在这个进程中,您记下它是哪个客户端(假设是客户端#11007)。
1.当它发生时,另一个命令从客户端到达(可能是同一个客户端或不同的客户端,这无关紧要)
1.当它发生时,另一个命令从客户端到达(可能是同一个客户端或不同的客户端,这无关紧要)
1.稍后,(2)中提到的过程完成。该过程执行以下操作:(i)检查客户端#11007是否仍然连接。(ii)如果是,则向该客户端发送命令。该命令可能是“new-map”,后跟map的二进制数据。
如果你在客户端“倾听回应”,你完全误解了实时通信的基本模式。
实际上,socketIO不能同时向客户端发送两个响应
从服务器到客户端的每一次通信都是一个命令。它们可能看起来像这些例子...

set-email [email protected]
ask-user-for-creds
new-table-data . . . various data, perhaps as json . . .
new-url http ...
log-out-the-user

字符串

server->client和client->server命令是完全不相关的。
客户端从不等待响应。客户端是根据发送给它们的命令(作为服务器->客户端命令)执行操作的傀儡。

piztneat

piztneat2#

这正是我所做的,客户端将其请求发送到服务器,并在响应准备就绪后,服务器将响应发送到客户端。问题是,如果多个客户端同时向服务器发送请求,服务器将在响应准备就绪时将它们发送到队列中的客户端,最后一个客户端可能会延迟很长时间才收到答案。我如何管理这个问题,让所有客户端都能真实的得到你想要的答案。

相关问题