0MQ在Node.js中的req等待rep

3
我是一个新手,对于javascript、Node.js和0MQ都不熟悉,所以这里有三个n00b。
我想建立一个简单的请求和响应,但是我希望客户端在发送下一个请求之前等待响应。 zguide讲解了这一点,但Node.js版本的行为与C版本不同(这正是我想要的)。
我意识到我正在面临一个范式转变,需要重新审视问题,但我仍然觉得我应该能够做到。我可以在客户端中进行recv调用(或类似的操作)吗?

你能详细说明一下“客户端在下一个请求之前必须等待响应”的意思吗?如果你是在谈论HTTP请求,那么你应该记住,无论平台/语言如何,HTTP请求都是无状态的。如果你只是想确保同一个客户端在收到第一个请求的回复之前不会发送两个请求,那么可以使用IP/来源/cookie(即:任何区分客户端的方式)来过滤请求。 - Bwaxxlo
我正在使用这个来进行进程间通信。具体而言,我有一个进程在收集数据,并希望在将聚合数据发送到网络之前从另一个进程中提取数据。在我听到另一个进程的回复并且拥有所有数据之前,我不想将数据发送出去。 - Coop
1个回答

2

你说得对,ZMQ的node.js版本表现与C版本不同,但它实际上是按照规则行事的,只是在其中添加了一些自己的调味料。

具体而言,如果您尝试打破严格的REQ/REP/REQ/REP循环,C绑定将抛出错误。在node.js中,它将缓存无序消息,直到前一个响应返回,然后发送该新消息...因此,您仍然按顺序获取REQ/REP/REQ/REP,并且可以选择在不出错的情况下随时发送消息。

这可能是node ZMQ绑定作者的设计不佳之处,首先因为这会让像您这样的新用户感到困惑,其次,如果您使用REQ/REP,则可能更喜欢在出现错误时进行硬性故障,否则您将使用不同的套接字类型。


这是我在node ZMQ绑定页面上进行的对话,我在那里找到了这个答案,可能会提供一些额外的背景信息。链接 - Jason

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接