我正在一个广播服务器上工作,所有客户端都应该能够向所有客户端发送广播消息,并且所有客户端都应该接收来自任何客户端的广播。我正在试图找出在服务器端实现这一功能的最佳方法。我遇到了一个BlockingQueue
,但我的理解是,当一个线程调用take()
时,它会删除该项,以便其他线程无法获取数据,并且每个客户端要么是生产者,要么是使用者。实现这一目标的最佳方式是什么?每个客户端将有一个线程在服务器端。
谢谢!
发布于 2014-03-03 13:18:16
你需要某种酒吧分局机制。这在Java中自下而上很难实现。我建议您查看一些现有的实现。
对于一个简单的、非持久的解决方案,您应该查看番石榴EventBus。根据这是如此的说法,Spring有一些类似于事件总线的东西,尽管我找不到更多的文档。最后,如果您感到冒险,可以查看Akka事件总线。
对于持久解决方案,您可以使用JMS (如ActiveMQ)和主题/订阅者模式。我对Spring + JMS有过很好的体验。Redis也可以执行pub/sub (不是JMS实现!)而且它的优点是可以被分发。我从来没试过,所以我不知道它有多好。
发布于 2014-03-03 13:21:30
给每个客户端一个线程安全队列,并将所有消息插入到每个队列中.
当客户端不再需要消息时,它将自动被垃圾收集。
https://stackoverflow.com/questions/22157574
复制相似问题