聊天应用程序,如何存储聊天记录?



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

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

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

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

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

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

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

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

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

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

我开发聊天的方式是:

  1. 我使用 Ubuntu Web 服务器。

  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

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

最新更新