双向发布者/订阅者TCP连接握手协议

时间:2013-01-29 17:57:55

标签: sockets distributed-computing publish-subscribe

我想编写一个发布者/订阅者分布式应用程序,其中每个节点可以同时发布和订阅数据(按主题)。为简单起见,假设有一个阶段,发布者/订阅者首先报告他们想要发布/订阅中央服务器的内容。完成后,服务器将信息发送给应连接到的订户,以便接收发布(按主题)。因为节点可以发布和订阅,所以节点A可以连接到另一个节点B以进行订阅,然后节点B也可以连接到节点A,因为它想要订阅节点A发布的一些数据。这是一种循环的“依赖”。

我现在遇到的问题是,我确实只想保留一个套接字用于两侧的这两个节点的通信,两者都用于发布数据和接收数据,因为套接字已经是双向构造。假设两个节点都有一个侦听端口的套接字侦听器。两个节点彼此同时连接,哪个连接将被接受,哪个被丢弃?什么协议适合这个问题?

谢谢!

3 个答案:

答案 0 :(得分:0)

套接字可以是双向的,但不能同时连接到两个端点。你需要:

  • 与中央服务器的活动(客户端)连接
  • 另一个连接到中央服务器告诉您连接到
  • 的内容
  • 监听(服务器)套接字,以便您可以接受入站连接
  • 每个入站连接接受的套接字。

答案 1 :(得分:0)

此过程类似于此open source networking library使用的握手过程。一旦建立连接,A - > B或B - > A,然后将单个现有连接用于所有通信。您最好的选择是通过查看Getting Started部分或how to create a client server application文章来了解相关信息。

答案 2 :(得分:0)

您的问题的良好匹配可能是某些DDS(数据分发服务)实施。它完全删除了具体端点的任何概念,只关注主题/数据。任何节点都可以充当主题/数据生成者和消费者。 DDS中间件负责所有寻址,状态传播,序列化/反序列化,流控制等。它还处理(自动)发现新主题和数据。

这是short video describing how DDS works

这是一个list of various DDS implementations(商业和免费)。