这个 μService 架构作为后端运行,一个 consul 实例管理所有服务。有一个特定的服务器,A 用 Sails 制作,并带有一些相关的套接字逻辑,我想使用sails.io 从另一个服务 B 使用。
每个服务都在自己的 Docker 容器中运行,但它们都连接到同一个网络。
所以,在开发的时候,我在本地运行A容器,用节点脚本模拟服务B,逻辑如下图所示。鉴于我只是在使用开放端口运行容器,因此服务 URL 非常简单,因此 Sails.io 用于连接的 URL 是localhost:PORT
. 这里的一切都很好。
当服务 A 在 μService 架构中运行时,问题就出现了。每个服务都在自己的 URL 中运行,例如backend.com/api/SERVICE_NAME
,充当命名空间,命名空间下的每条路由都实际命中SERVICE_NAME
服务。所以现在sails.io 在连接到服务A 时出现问题,我猜是因为路线发生了变化。
这些是我尝试过的所有变化const io = sailsIOClient(socketIOClient);
io.sails.url = 'http://backend.com/api/SERVICE_NAME';
然后
io.sails.url = 'http://backend.com';
io.sails.path = '/api/SERVICE_NAME'
然后
io.sails.url = 'http://backend.com';
io.sails.path = '/api/SERVICE_NAME/socket.io/'
然后我偶然发现了这个,它指的path
是 socket.io 的连接函数上的一个参数(这里是具体的)。我试过了,设置io.sails.autoConnect
为 false 并调用io.sails.connect()
,但我无法连接到 Sails 应用程序。
Socket is trying to reconnect to Sails...
_-|>_- (attempt #293)
我相当确定问题是客户端 io 无法到达找到 Sails 应用程序的正确路径,因为已设置架构。
有人处理过类似的情况吗?非常感谢您的建议。