首页 文章

localhost上的客户端 - 服务器发现服务

提问于
浏览
0

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

我倾向于通过UDP在服务器上发送数据包到所有已知的客户端,这些客户端将涉及客户端发送消息到已知的服务器地址,例如 127.0.0.1:12345 ,使用他们自己的地址订阅 127.0.0.1:54321 ,然后服务器发送一份副本每次事件发生时,每个活动用户的数据包 .

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

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

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

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

一定有更好的方法!有没有什么办法可以让客户端共享同一个端口(然后不需要进行客户端 - 服务器握手)来编写网络通信?如果我想通过局域网扩展这一点怎么办?如何轻松地将这些信息发布到感兴趣的机器上(倾向于多播,但这是最干净的方法,当localhost上存在某些或所有客户端时,如何使多播工作)?

1 回答

  • 0

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

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

    1)除了每个唯一的{Protocol,IP,Port}元组具有单个服务器之外别无他法 . 允许一台服务器戴上几顶帽子或每台服务器有一个端口 .

    2)您需要一个服务器注册表才能工作 . 替代方案可以是用户发送请求服务器以标识自己的广播消息 .

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

相关问题