0

我有一个 Azure 托管应用程序 (iisnode),它接受来自多个客户端服务的直接连接。此应用程序在各种连接之间传输数据。如果在具有多个 node.js 实例的系统上运行,实际的 TCP 连接将连接到不同的实例。

有没有办法以某种方式将内存中的连接从一个实例“移动”或“共享”到另一个实例?

当然,我可以构建一些实例间通信来路由数据,但我认为应用程序不会扩展,因为它的全部目的是快速移动数据。例如,我将有 4 个实例,每个实例有 100 个连接,并且我将花费与在客户端连接之间移动数据所花费的资源一样多的资源在实例之间移动数据。

4

1 回答 1

2

当您将 iisnode 配置为创建多个 node.exe 进程(使用 nodeProcessCountPerApplication 设置)时,它将使用循环逻辑在它们之间分派传入的 HTTP 请求;应用程序无法控制该行为。鉴于您的情况,无法确定性地确保来自两个不同客户端的请求(“连接”)将位于同一个 node.exe 进程中。

没有在 node.exe 进程之间“移动”现有 TCP 连接或 HTTP 请求的机制。

通常,解决此类通知场景的更好方法可能是使用基于订阅的消息传递基础架构作为您的后端。Azure 中的 ServiceBus 提供了这样的机制。在此设计中,node.exe 的每个实例在收到来自客户端的连接时都会订阅特定主题,并在匹配的通知到达时由 ServiceBus 通知,可能通过不同的 node.exe 实例。

于 2012-10-23T16:51:47.053 回答