我正在广播服务器上工作,所有客户端都应该能够向所有客户端发送广播消息,并且所有客户端都应该从任何客户端接收广播。我想弄清楚在服务器端实现这个的最佳方法是什么。我遇到了BlockingQueue
,但我的理解是,当一个线程调用take()
时,它会删除该项,以便其他线程无法获取数据,并且每个客户端都是生产者或消费者。实现这个最好的方法是什么?每个客户端都有一个服务器端的线程。
谢谢!
答案 0 :(得分:0)
你需要某种pub-sub机制。这在Java中很难从下到上实现。我建议你看看一些现有的实现。
对于简单的非持久性解决方案,您应该查看Guava EventBus。根据{{3}},Spring有类似事件总线的东西,虽然我找不到更多的文档。最后,如果您有冒险的话,可以查看this SO。
对于持久性解决方案,您可以使用JMS提供程序(如ActiveMQ)和主题/订阅者模式。我有很好的Spring + JMS经验。 Redis也可以做pub / sub(不是JMS实现!),它具有分发的优点。我从未尝试过,所以我不知道它有多好。
答案 1 :(得分:0)
为每个客户端提供一个线程安全的队列,并将所有消息发送到每个队列。
当没有客户端需要消息时,它将自动被垃圾收集。
答案 2 :(得分:0)
答案 3 :(得分:0)
看一下kryonet项目。我在我的几个项目中使用它并且它真的很好