Chat Application,如何存储聊天记录?
Chat Application, how to store chat history?
我正在 Java 开发一个聊天应用程序。
使用的架构是服务器-客户端架构。
大部分代码在 Java、JavaFX 中用于 GUI 和 PostgreSQL 作为数据库。
由于这是一个聊天应用程序(桌面),我想知道哪种是存储聊天记录的最佳方式:
- 在本地的文本文件中,客户端每次都必须阅读
- 数据库中字符串类型 (VarChar)
- 在服务器中作为列表
基于三种方式的一些问题:
- 如果客户端从不同的机器连接,文本文件将不存在
- 是否可以使用聊天室 ID 将每个文本条目存储在数据库中?
- 服务器在运行期间可以存储多少个对象?
我会说 Nr2 - 出于安全原因(如果您关心它)并且因为这是一种非常简单的方法。
一开始,一个有 4 列的数据库就足够了(Date/Time、ChatroomID、UserID 或只是一个名称和消息本身)。如果用户发送一条新消息,它会创建一个新行,其中包含列所需的所有信息。当您的客户端重新加载时(可能每 10 秒),您也可以轻松地遍历它
我也是类似情况,我也是从0开发聊天,唯一不同的是我是为了iOS.
我开发聊天的方式是:
我使用 Ubuntu 网络服务器。
服务器在Mysql有数据库,通过NodeJS与用户通信
- 在 NodeJS 中,我有一个套接字 "Socket.io" 可以促进用户之间的通知。
- 在 iOS 设备上,我将它收到的所有消息存储在 Core Data 中,它是 SQLite 的扩展。
- 为了根据用户连接的设备获取待处理的消息,我为每个设备使用一个 ID,这个 ID 由 MAC 物理地址创建和识别,因此消息要发送到从服务器获取什么不是。
最初我基于这个数据库来了解如何构建我的应用程序:https://github.com/yoosuf/Messenger
Socket.IO 非常容易使用,最好的是它有针对不同编程语言的库,这是它的页面:
https://socket.io/
https://github.com/socketio/socket.io
在您的三个选择中,我建议您选择选项 #2 来存储聊天记录:数据库,原因如下:
- 如果您将聊天记录存储在本地文本文件中,您 运行 会遇到诸如如何与他人同步等问题。此外,您可以修改文本文件的内容,而无需通过 Java 程序(例如使用编辑器)。如果此文件包含带有 敏感信息 的聊天记录,并且有人可以访问您的计算机,则他们可以阅读该文件。这意味着麻烦。
- 存储在数据库中是个好主意,因为它为所有 Java 程序提供了一个中心位置。如果多人使用您的 Java 客户端,这将特别方便,这样他们就可以获取聊天记录,也可以轻松地将聊天内容转移给其他人!我不仅会使用类型字符串 (VarChar),还会尝试考虑其他一些可能有用的字段或列(即 timeSent、chatUserID、timeRead 等)。这也提出了一点,通过使用数据库,您可以设置某种用户访问权限(用户名和密码),以便特定的人可以阅读特定的聊天记录。
- 如果您将服务器上的聊天记录作为列表存储在 Java 服务器本身中,并且如果您的服务器重新启动,您将丢失所有聊天记录。 真可惜.
总而言之,保持您的 Java client-server-database 架构非常好,技术上所有 3 个选项都可以工作,但数据库是存储聊天记录的方式!即使设置数据库需要一些工作,但由于数据库是为归档数据而构建的,因此它在效率和安全性方面优于描述的其他 2 种方法。
我正在 Java 开发一个聊天应用程序。
使用的架构是服务器-客户端架构。
大部分代码在 Java、JavaFX 中用于 GUI 和 PostgreSQL 作为数据库。
由于这是一个聊天应用程序(桌面),我想知道哪种是存储聊天记录的最佳方式:
- 在本地的文本文件中,客户端每次都必须阅读
- 数据库中字符串类型 (VarChar)
- 在服务器中作为列表
基于三种方式的一些问题:
- 如果客户端从不同的机器连接,文本文件将不存在
- 是否可以使用聊天室 ID 将每个文本条目存储在数据库中?
- 服务器在运行期间可以存储多少个对象?
我会说 Nr2 - 出于安全原因(如果您关心它)并且因为这是一种非常简单的方法。 一开始,一个有 4 列的数据库就足够了(Date/Time、ChatroomID、UserID 或只是一个名称和消息本身)。如果用户发送一条新消息,它会创建一个新行,其中包含列所需的所有信息。当您的客户端重新加载时(可能每 10 秒),您也可以轻松地遍历它
我也是类似情况,我也是从0开发聊天,唯一不同的是我是为了iOS.
我开发聊天的方式是:
我使用 Ubuntu 网络服务器。
服务器在Mysql有数据库,通过NodeJS与用户通信
- 在 NodeJS 中,我有一个套接字 "Socket.io" 可以促进用户之间的通知。
- 在 iOS 设备上,我将它收到的所有消息存储在 Core Data 中,它是 SQLite 的扩展。
- 为了根据用户连接的设备获取待处理的消息,我为每个设备使用一个 ID,这个 ID 由 MAC 物理地址创建和识别,因此消息要发送到从服务器获取什么不是。
最初我基于这个数据库来了解如何构建我的应用程序:https://github.com/yoosuf/Messenger
Socket.IO 非常容易使用,最好的是它有针对不同编程语言的库,这是它的页面: https://socket.io/ https://github.com/socketio/socket.io
在您的三个选择中,我建议您选择选项 #2 来存储聊天记录:数据库,原因如下:
- 如果您将聊天记录存储在本地文本文件中,您 运行 会遇到诸如如何与他人同步等问题。此外,您可以修改文本文件的内容,而无需通过 Java 程序(例如使用编辑器)。如果此文件包含带有 敏感信息 的聊天记录,并且有人可以访问您的计算机,则他们可以阅读该文件。这意味着麻烦。
- 存储在数据库中是个好主意,因为它为所有 Java 程序提供了一个中心位置。如果多人使用您的 Java 客户端,这将特别方便,这样他们就可以获取聊天记录,也可以轻松地将聊天内容转移给其他人!我不仅会使用类型字符串 (VarChar),还会尝试考虑其他一些可能有用的字段或列(即 timeSent、chatUserID、timeRead 等)。这也提出了一点,通过使用数据库,您可以设置某种用户访问权限(用户名和密码),以便特定的人可以阅读特定的聊天记录。
- 如果您将服务器上的聊天记录作为列表存储在 Java 服务器本身中,并且如果您的服务器重新启动,您将丢失所有聊天记录。 真可惜.
总而言之,保持您的 Java client-server-database 架构非常好,技术上所有 3 个选项都可以工作,但数据库是存储聊天记录的方式!即使设置数据库需要一些工作,但由于数据库是为归档数据而构建的,因此它在效率和安全性方面优于描述的其他 2 种方法。