问题
我想通过 TCP 连接两个进程,但我不想指定其中哪个是服务器,哪个是客户端,但它们知道彼此的 IP 和主机。他们应该自己决定哪个是服务器,哪个是客户端,然后启动连接。
背景
我正在研究一个双向分布式框架 - 与 RPC 相比 - 没有客户端/服务器模型。相反,分布式组件应该能够通过指定主机和端口来相互通信。
编辑:这个概念超出了套接字连接的实现细节。这应该是一个新概念,以简化软件工程方面的分布式应用程序设计。这与 RPC 和 SOA(面向服务器/客户端)和面向消息的系统(需要使用 IMO 非直观模式)形成对比。
解决方案不得
- 通过 UDP 定义协议,因为我需要 TCP 可靠性和 SSL 使用的可能性
- 使用 ZeroMQ 之类的框架,因为我无法在目标平台上使用二进制包
- 编辑:一个全局消息代理/名称服务器,因为它应该是一个轻量级的解决方案,没有额外的过程。添加这样一个节点只会重新引入客户端/服务器概念
更新
经过讨论,似乎只有一种有用的方法:每个对等点都需要一个列表套接字(或者您当然不能进行任何自动发现)。在连接请求中,如果还没有打开的连接,节点将尝试连接到另一个对等点。
如果连接是同时完成的,这可能会出现问题,因此我们最终会在两个对等方之间建立两个连接。现在的问题是如何在异步上下文中处理它。我认为这并不像下面评论中所说的那么简单,因为我们需要保证只关闭一个连接。我认为这项任务需要像 2PC 这样的协议。