0

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

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

谢谢!

4

3 回答 3

0

这个过程类似于这个开源网络库使用的握手过程。一旦建立了连接 A -> B 或 B -> A,则单个现有连接将用于所有通信。您最好的选择可能是通过查看入门部分或如何创建客户端服务器应用程序文章来查看它的实际效果。

于 2013-01-30T00:55:42.173 回答
0

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

这是一个描述 DDS 工作原理的简短视频

这是各种 DDS 实现(商业和免费)的列表。

于 2013-02-04T17:30:28.543 回答
0

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

  • 与中央服务器的活动(客户端)连接
  • 另一个连接到中央服务器告诉你连接的任何东西
  • 一个监听(服务器)套接字,因此您可以接受入站连接
  • 每个入站连接接受的套接字。
于 2013-01-30T00:01:18.987 回答