【问题标题】:Chat Application, how to store chat history?聊天应用程序,如何存储聊天记录?
【发布时间】:2018-03-14 01:28:43
【问题描述】:

我正在用 Java 开发一个聊天应用程序。

使用的架构是服务器 - 客户端架构。
大部分代码使用 Java,JavaFX 用于 GUI,PostgreSQL 作为数据库。

由于这是一个聊天应用程序(桌面),我想知道哪种方式是存储聊天记录的最佳方式:

  1. 本地在文本文件中,客户端每次都必须读取
  2. 在数据库中为 String (VarChar) 类型
  3. 在服务器中作为列表

基于三种方式的一些问题:

  1. 如果客户端从不同的机器连接,文本文件将不存在
  2. 是否可以使用聊天室ID 将每个文本条目存储在数据库中?
  3. 只要服务器运行,可以在服务器中存储多少对象?

【问题讨论】:

  • 1 和 3 都不是持久的,只有 2 会带你到达那里。

标签: java postgresql list text chat


【解决方案1】:

在您的三个选择中,我建议您选择选项 #2 来存储聊天记录:数据库,原因如下:

  1. 如果您将聊天记录存储在本地的文本文件中,您会遇到诸如如何与他人同步等问题。此外,您可以修改文本文件的内容,而无需通过 Java 程序(例如使用编辑器)。如果此文件包含与敏感信息的聊天内容,并且有人可以访问您的计算机,他们可以阅读该文件。这会带来麻烦。
  2. 在数据库中存储是一个好主意,因为它为所有 Java 程序提供了一个中心位置。如果多人使用您的 Java 客户端,这将特别方便,这样他们就可以获取聊天历史记录,以及轻松地将聊天转移给其他人!我不仅会使用 String 类型(VarChar),还会尝试考虑其他一些可能有用的字段或列(即 timeSent、chatUserID、timeRead 等)。这也说明了通过使用数据库,您可以设置某种用户访问权限(用户名和密码),以便特定的人可以阅读特定的聊天记录。
  3. 如果您将服务器上的聊天作为列表存储在 Java 服务器本身中,并且如果您的服务器重新启动,您会丢失所有聊天历史记录。太糟糕了。

总而言之,保持 Java 客户端-服务器-数据库架构非常好,从技术上讲,所有 3 个选项都可以工作,但数据库是存储聊天记录的最佳方式!即使设置数据库需要一些工作,但由于数据库是为归档数据而构建的,因此它在效率和安全性方面优于其他两种方法。

【讨论】:

    【解决方案2】:

    我也有类似的情况,我也是从 0 开始开发聊天的,唯一不同的是我是为 iOS 做的。

    我开发聊天的方式是:

    1. 我使用的是 Ubuntu 网络服务器。

    2. 服务器在Mysql中有一个数据库,与用户的通信是通过NodeJS完成的。

    3. 在 NodeJS 中,我有一个套接字“Socket.io”,它有助于用户之间的通知。
    4. 在 iOS 设备上,我将它接收到的所有消息都存储在 Core Data 中,这是 SQLite 的扩展。
    5. 为了根据用户连接的设备获取待处理消息,并且我为每个设备使用一个 ID,此 ID 由 MAC 物理地址创建和标识,因此从服务器获取哪些消息以及什么不是。

    最初我基于这个数据库来了解如何构建我的应用程序:https://github.com/yoosuf/Messenger

    Socket.IO 非常易于使用,最好的一点是它拥有适用于不同编程语言的库,这是它的页面: https://socket.io/ https://github.com/socketio/socket.io

    【讨论】:

      【解决方案3】:

      我会说 Nr2 - 出于安全原因(如果您关心它)并且因为它是一种非常简单的方法。 一开始,一个有 4 列的数据库就足够了(日期/时间、聊天室 ID、用户 ID 或只是一个名称和消息本身)。如果用户发送一条新消息,它会创建一个新行,其中包含列所需的所有信息。当您的客户端重新加载(可能每 10 秒)时,您也可以轻松地遍历它

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-17
        • 1970-01-01
        • 1970-01-01
        • 2019-07-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多