我有一个Azure托管应用程序(iisnode),它接受来自多个客户端服务的直接连接。此应用程序在各种连接之间传输数据。如果在具有多个node.js实例的系统上运行,则实际的TCP连接将连接到不同的实例。
有没有办法以某种方式“移动”或“共享”内存连接从一个实例到另一个实例?
当然,我可以构建一些实例间通信来路由数据,但我认为应用程序不会扩展,因为它的全部目的是快速移动数据。例如,我将有4个实例,每个实例有100个连接,我将花费尽可能多的资源在实例之间移动数据,就像我在客户端连接之间移动数据一样。
答案 0 :(得分:2)
当您将iisnode配置为创建多个node.exe进程(使用nodeProcessCountPerApplication设置)时,它将使用循环逻辑在它们之间分派传入的HTTP请求;应用程序无法控制该行为。鉴于您的方案,无法确定性地确保来自两个不同客户端的请求(“连接”)将在同一node.exe进程中共存。
没有机制在node.exe进程之间“移动”现有的TCP连接或HTTP请求。
通常,解决此类通知方案的更好方法可能是使用基于订阅的消息传递基础结构作为后端。 Azure中的ServiceBus提供了这样的机制。在此设计中,node.exe的每个实例在从客户端接收连接时将订阅特定主题,并在匹配通知到达时由ServiceBus通知,可能通过node.exe的不同实例。