Nodej请求未按其进入的顺序进行处理

uajslkp6  于 2023-02-18  发布在  Node.js
关注(0)|答案(1)|浏览(118)

我正在开发一个离线优先的移动的应用程序,它会将数据同步到nodejs服务器(如果相关的话,我会将graphql与Apollo服务器一起使用)。移动应用程序存储了离线时所做的一系列变异,当它上线时,它会将所有变异发送到服务器。多亏了apollo-link-serialize,它们会以正确的顺序发送,但它们不会等待前一个变异完成。
如果我在离线时创建一个对象,然后更改它的一个属性,有时服务器会在创建变异之前处理更改变异,从而导致错误。
我正在寻找一种方法,使服务器处理来自单个用户的请求串行,而不是并行。
我可以只创建一个全局变量,手动将来自每个用户的请求排队,并仅在前一个用户完成请求时执行它们,但这听起来不像是正确的解决方案。

gab6jxml

gab6jxml1#

听起来你应该为每个用户创建一个工作队列,这样你就可以按照先进先出的顺序处理与特定用户相关的请求。工作队列可以是一个对象数组,其中每个对象描述一个请求(所需的操作、关联的数据、参数等)。
每当有用户的请求时,您都要检查是否已经有该用户的队列。如果有,则将请求添加到队列的末尾。如果没有,则创建队列并开始处理第一个请求。
每当你完成一个请求,就把它从队列中移除,看看在那个用户的队列中是否还有其他请求。如果有,你就抓取下一个请求并开始处理它。如果没有,就移除队列。
队列可以在用户的服务器端会话中,因此很容易与用户关联。
为了完整起见,您可能必须处理多个浏览器代表同一个用户访问服务器的情况。您可以完全防止这种情况(注销该用户的其他会话),或者必须在代表同一个用户的所有客户机之间共享同一个服务器端会话。

相关问题