【问题标题】:Java Multi-Client Instant Messenger concept helpJava Multi-Client Instant Messenger 概念帮助
【发布时间】:2011-03-27 23:07:57
【问题描述】:

我正在尝试实现一个 Java 聊天程序。在这个程序中,多个客户端将通过服务器相互交谈。服务器会将消息从客户端中继到另一个客户端。它还将提供好友列表的更新。从概念上讲,实施此 IM 聊天的最佳途径是什么。我遇到问题的部分是使服务器将消息从一个客户端中继到另一个客户端。每个客户端还应该能够选择他们想与谁交谈。再一次,服务器的唯一目的是从一个客户端获取消息并将其发送到另一个客户端。如果一个客户端连接到服务器,则在另一个客户端连接之前不会发生任何事情。然后两个客户端开始相互通信。

【问题讨论】:

  • 恐怕你需要比这更具体。你到底有什么问题?处理实际的网络 I/O?使用什么数据结构来存储客户端元数据?设计您将使用的协议?

标签: java client chat


【解决方案1】:

您需要提出实施协议;查看XMPP。部分问题是确定您将向哪个其他用户发送消息。 XMPP 有助于解决这个问题。我建议每个连接到服务器的用户都有一个线程来处理连接。然后,您可以将所有线程存储到 HashMap 中,其中键是用户名。然后只需将消息推送到将消息发送到客户端的线程实现上。

【讨论】:

  • 所以我应该将客户端服务器连接存储在一个表或列表中,但是一个客户端如何与另一个客户端通信?
  • 它们不直接相互通信,它们与服务器通信,服务器跟踪消息需要路由到的位置。因此,用户 A 向服务器发送一条消息,上面写着“发送给用户 B”,然后服务器看到用户 B 已连接并发送消息说“用户 A 说 ”。
  • @Delanoy:客户端 A 将向服务器发送 XMPP 消息;服务器将通过其连接的客户端 HashMap(或 ArrayList 或 LinkedList 或某些容器类型,如果您想将其中之一装箱)来查找客户端 B。如果成功,服务器会将新消息推送到客户端 B 中的队列中,并且向客户端 A 发送回执。如果不成功,服务器可以向客户端 A 发送失败消息。注意:当我说服务器在寻找客户端 B 时,它正在寻找连接客户端 B 的服务器中的线程。
【解决方案2】:

对于基本的聊天系统,您需要以下功能:

  1. 客户端登录到您的服务器。这使您可以识别客户并为每个客户保留朋友列表。
  2. 客户端只向服务器发送消息。
  3. 客户端只接收来自服务器的消息。
  4. 每条消息必须标识以下内容:
    1. 邮件的收件人。
    2. 消息的来源。
    3. 消息的文本。
    4. 也许;发送消息的时间和日期。
  5. 服务器需要跟踪对话;基本上是一个客户对列表。
  6. 如果您要进行群聊,则转换将是客户列表。
  7. 当客户端向服务器发送消息时,服务器应将其转发给参与对话的所有其他客户端。
  8. 您可能希望让服务器记录所有对话。
  9. 您将需要至少 2 种消息类型;文本(即聊天)和邀请。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-09
    相关资源
    最近更新 更多