Node.js的有状态进程间通信

4
我可能会错过一个明显的技巧,但是有没有办法让2个以上的node.js进程以有状态的方式交换消息? 例如: 进程A是一个HTTP服务器,用于处理传入的外部http请求,为了满足这些请求,它需要从进程B或C中获取信息。目前我让'A'为'B'或'C'的每个请求打开一个TCP/IP连接,它们监听在一个合适的端口上。
这似乎非常糟糕,并且有很多开销,因为每个请求都需要大量的开销来打开和关闭套接字,但是如果不为每个请求打开套接字,则无法确保来自'B'或'C'的响应绑定到正确的HTTP响应。
所有进程都在nodejs中,B + C具有较长的启动时间(30秒以上),因此无法针对每个请求生成它们。所有进程当前都在同一台机器上运行(双核)。 就协议而言,我仅使用了nodejs文档中描述的基本“net”服务器,并通过它传输文本。
欢迎提出任何建议等。

为什么进程A不能维护与进程B + C的持久TCP连接,并根据需要使用它们? - maerics
1
如果我通过管道发送数据,当响应返回时,nodejs如何知道将该数据应用于哪个http请求?(我真的不知道) - James Butler
这取决于服务器B和C所使用的协议。您能否在问题中提供有关此方面的详细信息? - maerics
添加了一点内容 - 如果不够,请告诉我。 - James Butler
1个回答

2
您可以选择在消息(A < -> B/C进程之间)中传递唯一的会话ID(应用服务器/自动生成的),并可能附加一个计数器到会话ID上(在会话ID和计数器之间使用分隔符)。计数器将在每个新请求时递增。我相信您可以使用更好/更简单的选项。
对于进程间消息传输,可以查看内存缓存(例如redis/memcached等)或使用消息服务器(例如ZermoMQ/RabbitMQ等),也可以选择避免使用消息服务器,只需在节点中使用hook.io或net/tcp进行消息传输。
希望这可以帮助您。

谢谢,阿里。我有点儿迟钝,没想到可以将HTTP连接存储在池中以便稍后处理。 - James Butler

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