我有一个应用程序,我想扩展为始终将数据发布到套接字,以便当任何想要侦听数据包的自定义应用程序发生关键事件时,可以处理它们。
我倾向于通过localhost
上的UDP从服务器向所有已知客户端发送数据包,这些客户端将涉及客户端将消息发送到已知服务器地址,例如127.0.0.1:12345
,使用他们自己的地址订阅{ {1}},然后服务器每次发生事件时都会向每个活动用户发送一份数据包副本。
我在这里看到了一些需要解决的问题:
服务器可能处于争用状态,并尝试在127.0.0.1:54321
绑定同一个“已知”服务器端口
需要让客户了解每个可用的服务器发布消息,以便用户可以选择他们有兴趣收听的服务器
服务器需要定期询问每个客户端是否还在监听,因为这将是UDP
必须有更好的方法!有没有什么办法可以让客户端共享同一个端口(然后不需要进行客户端 - 服务器握手)来编写网络通信?如果我想通过局域网扩展这一点怎么办?如何轻松地将这些信息发布给感兴趣的机器(倾向于多播,但这是最干净的方法,当局部主机上存在某些或所有客户端时,如何使多播工作?)
答案 0 :(得分:0)
每种解决方案都有其优点和缺点,因此没有更好的方法可以做到这一点。最后,通过使用特定的库来实现应用程序间消息传递(如ZeroMQ或RabbitMQ)而不是尝试通过编写自己的代码来实现订阅者/发布者和多播模式来重新发明轮子,您可能获得最大收益
编辑:如果您决定重新发明轮子,请回答您的问题:
1)除了每个唯一的{Protocol,IP,Port}元组拥有一台服务器之外别无他法。允许一台服务器戴上几顶帽子或每台服务器都有一个端口。
2)您需要一个服务器注册表才能实现此目的。替代方案可以是用户发送请求服务器以标识自己的广播消息。
3)是的 - 你需要一个keepalive来知道用户是否还在那里。或者,用户可以定期联系服务器,说我还在这里。