本地主机上的客户端-服务器发现服务



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

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

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

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

  2. 客户端需要了解每个可用的服务器发布消息,以便用户可以选择他们感兴趣的服务器

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

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

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

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

1) 除了每个唯一的 {协议、IP、端口} 元组有一个服务器之外,没有其他方法。允许一台服务器戴上多个帽子,或者每个服务器有一个端口。

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

3)是的 - 你需要一个保持连接才能知道用户是否还在那里。或者,用户可以定期联系服务器说我还在这里。

最新更新