【问题标题】:Java Sockets - Messages between many clientsJava Sockets - 许多客户端之间的消息
【发布时间】: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 时,但它允许所有服务器将接收的内容发送给他们想要的任何人。
  • 您可能想探索点对点方法!
  • 想想你的要求。客户来来去去?当客户回来时,您是否需要发送延迟消息?等等……

标签: java sockets ipc


【解决方案1】:

UDP 多播系统可以解决这个问题,但您自己做会变得复杂(因为您必须自己担心同步和故障检测/纠正以及节点进出组)。

有各种中间件解决方案,包括已经很好地解决了这个问题的分布式缓存。看看英菲尼斯潘。如果这太高级了,而您只想要一个较低级别的解决方案,请尝试 JGroups。我只列出这些是因为我知道它们快速且可用,但还有很多其他的。

【讨论】:

  • Infinispan 有点太高级了,而且比我真正需要的更强大。 JGroups 似乎是最好的。谢谢,非常中肯的回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-18
  • 2023-01-07
  • 2012-03-06
  • 1970-01-01
  • 2018-08-16
  • 1970-01-01
相关资源
最近更新 更多