首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在线程之间传递数据,都能产生,都应该消耗(Java)

在线程之间传递数据,都能产生,都应该消耗(Java)
EN

Stack Overflow用户
提问于 2014-03-03 21:14:17
回答 4查看 333关注 0票数 1

我正在一个广播服务器上工作,所有客户端都应该能够向所有客户端发送广播消息,并且所有客户端都应该接收来自任何客户端的广播。我正在试图找出在服务器端实现这一功能的最佳方法。我遇到了一个BlockingQueue,但我的理解是,当一个线程调用take()时,它会删除该项,以便其他线程无法获取数据,并且每个客户端要么是生产者,要么是使用者。实现这一目标的最佳方式是什么?每个客户端将有一个线程在服务器端。

谢谢!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-03-03 21:18:16

你需要某种酒吧分局机制。这在Java中自下而上很难实现。我建议您查看一些现有的实现。

对于一个简单的、非持久的解决方案,您应该查看番石榴EventBus。根据这是如此的说法,Spring有一些类似于事件总线的东西,尽管我找不到更多的文档。最后,如果您感到冒险,可以查看Akka事件总线

对于持久解决方案,您可以使用JMS (如ActiveMQ)和主题/订阅者模式。我对Spring + JMS有过很好的体验。Redis也可以执行pub/sub (不是JMS实现!)而且它的优点是可以被分发。我从来没试过,所以我不知道它有多好。

票数 0
EN

Stack Overflow用户

发布于 2014-03-03 21:21:30

给每个客户端一个线程安全队列,并将所有消息插入到每个队列中.

当客户端不再需要消息时,它将自动被垃圾收集。

票数 0
EN

Stack Overflow用户

发布于 2014-03-03 21:22:07

这是一个棘手的问题,我真的不建议你自己滚动。使用ActiveMQRabbitMQ代替。这些人整天都在做这件事,他们知道自己在做什么。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22157574

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档