Java Sockets - 许多客户端之间的消息
Posted
技术标签:
【中文标题】Java Sockets - 许多客户端之间的消息【英文标题】:Java Sockets - Messages between many clients 【发布时间】:2014-09-26 20:29:15 【问题描述】:所以问题是我有 15 个客户端需要能够相互通信。我的问题是这应该怎么做?显然,一种方法是让客户端也成为服务器,但这意味着完全连接 15 个客户端需要 120 个唯一连接。我宁愿不这样做,因为它看起来很乱。
目前的解决方案: 每个新连接都让服务器启动一个单独的线程来监听它。每个客户端都有一个单独的线程来监控传入信息的通道。
服务器充当消息路由器:进程 1 需要向进程 2 发送消息,并向服务器发送消息,指明预期的接收者、发送者和消息。
服务器收到消息后将消息传递给进程 2。侦听线程检测到它并将其传递给进程。
客户端之间的每条消息都以此类推。
这看起来很笨重。有没有更好的方法/包可以用于此?
【问题讨论】:
您可以查看 Java 7 引入的 java.nio 包。它提供了非阻塞套接字通道以更好地处理您的场景类型。 docs.oracle.com/javase/7/docs/api/java/nio/channels/… 看看UDP / DatagramSocket。没有确认您的数据已到达,例如使用 TCP /Socket
时,但它允许所有服务器将接收的内容发送给他们想要的任何人。
您可能想探索点对点方法!
想想你的要求。客户来来去去?当客户回来时,您是否需要发送延迟消息?等等……
【参考方案1】:
UDP 多播系统可以解决这个问题,但您自己做会变得复杂(因为您必须自己担心同步和故障检测/纠正以及节点进出组)。
有各种中间件解决方案,包括已经很好地解决了这个问题的分布式缓存。看看英菲尼斯潘。如果这太高级了,而您只想要一个较低级别的解决方案,请尝试 JGroups。我只列出这些是因为我知道它们快速且可用,但还有很多其他的。
【讨论】:
Infinispan 有点太高级了,而且比我真正需要的更强大。 JGroups 似乎是最好的。谢谢,非常中肯的回答。以上是关于Java Sockets - 许多客户端之间的消息的主要内容,如果未能解决你的问题,请参考以下文章
Spring框架web sockets独特的@SendTo注解