我正在尝试连接两台机器。Azure 云服务 (A) 和不属于 Windows Azure 的 Linux 机器 (B)。我想做的是在 A 和 B 之间建立开放连接。这样 A 就可以知道 B 处于活动状态。我无法直接从 A ping B,因为 B 位于内部网络中。B 没有我可以 ping 的公共 IP。换句话说,B 将通过路由器连接到互联网。我需要通过 A 从网络向 B 发送一些命令。这就是为什么我需要保持 A 和 B 之间的开放连接。有什么解决方案、想法或文章可以让我实现这一点吗?
更多详细信息请参见基础设施图表
答案1
您要做的是改变客户端系统中的逻辑 - 而不是每 15 分钟连接一次,如下所示:
- 打开与控制服务器的 TCP 连接
- 报到
- 关闭 TCP 连接
让他们这样做......
- 打开与服务器的 TCP 连接
- 识别自己,检查配置文件
- ..等待命令..
- 连接失败或关闭了吗?请重新打开!(设置合理的重试计时器)
这样,中央服务器就可以在需要时向节点发送数据,例如动态更新其配置文件 - 每个视频系统都将连接到它并能够立即接受来自服务器的更新。推送电子邮件系统基本上采用相同的机制 - 客户端保持与服务器的连接,服务器可以在需要时立即向其发送新数据。
根据您的应用程序架构,插入某种消息队列系统来执行此操作可能更有意义;我不熟悉大多数 MQ 的通信协议细节(以及它们是否适用于您的网络设置),但类似Redis 发布/订阅看起来非常合适。