0

我有一个应用程序,我想扩展它以始终将数据发布到套接字,以便当关键事件发生在任何想要侦听数据包的自定义应用程序时,可以处理它们。

我的倾向是通过UDPlocalhost从服务器向所有已知的客户端发送数据包,这将涉及客户端将消息发送到已知的服务器地址,例如127.0.0.1:12345,使用他们自己的地址订阅127.0.0.1:54321,然后服务器向每个客户端发送数据包的副本。每次事件发生时的活跃订阅者。

我在这里看到一些需要解决的问题:

  1. 服务器可能处于争用状态并尝试绑定相同的“已知”服务器端口127.0.0.1:12345

  2. 客户端需要知道每个可用的服务器发布消息,以便用户可以选择他们有兴趣收听的服务器

  3. 服务器需要定期询问每个客户端是否仍在侦听,因为这将是 UDP

一定有更好的方法!有什么方法可以让客户端共享同一个端口(那么就不需要客户端-服务器握手)来编写网络通信了吗?如果我想在 LAN 上扩展它,我怎样才能轻松地将这些信息发布到感兴趣的机器上(倾向是多播,但这是最干净的方法,当 localhost 上存在部分或所有客户端时,如何使多播工作)?

4

1 回答 1

0

每个解决方案都有其优点和缺点,因此没有更好的方法可以做到这一点。最后,您可能会通过使用诸如 ZeroMQ 或 RabbitMQ 之类的应用程序间消息传递的特定库来获得最大收益,而不是尝试通过编写自己的代码来实现订阅者/发布者和多播模式来重新发明轮子

编辑:回答你的问题,以防你决定重新发明轮子:

1) 除了每个唯一的 {Protocol, IP, Port} 元组有一个服务器之外别无他法。要么允许一台服务器戴多个帽子,要么每台服务器有一个端口。

2)您需要一个服务器注册表才能工作。另一种方法可以是用户发送请求服务器以识别自己的广播消息。

3)是的 - 你需要一个keepalive来知道用户是否仍然在那里。或者,用户可以定期联系服务器说我还在这里。

于 2016-01-28T12:36:22.543 回答