首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >聊天应用程序,如何存储聊天历史?

聊天应用程序,如何存储聊天历史?
EN

Stack Overflow用户
提问于 2018-03-12 18:58:37
回答 3查看 5.9K关注 0票数 3

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

所使用的体系结构是服务器-客户端架构。

大部分代码都是用Java、JavaFX作为图形用户界面和PostgreSQL作为数据库。

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

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

基于以下三种方法的一些问题:

  1. 如果客户端从另一台计算机连接,则文本文件将不存在。
  2. 是否可以用chatroomID存储数据库中的每个文本条目?
  3. 在服务器运行期间,有多少对象可以存储在服务器中?
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-03-13 17:23:32

在您的三种选择中,我建议您选择用于存储聊天历史记录的选项2:数据库,原因如下:

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

总之,保持Java客户机-服务器-数据库体系结构是非常好的,从技术上讲,所有三个选项都可以工作,但是数据库是存储聊天历史的方法!即使建立数据库需要做一些工作,但由于数据库是为归档数据而构建的,因此在其他两种方法中,它的效率和安全性都优于其他两种方法。

票数 2
EN

Stack Overflow用户

发布于 2018-03-12 19:14:12

我在类似的情况下,我也在开发一个从0聊天,唯一的区别是,我这样做是为了iOS。

我发展聊天的方式是:

  1. 我使用Ubuntu网络服务器。
  2. 服务器在Mysql中有一个数据库,并通过NodeJS与用户进行通信。
  3. 在NodeJS中,我有一个套接字"Socket.io“,它方便用户之间的通知。
  4. 在iOS设备上,我将接收到的所有消息存储在核心数据中,这是SQLite的扩展。
  5. 为了根据用户连接的设备获得挂起的消息,我为每个设备使用一个ID,该ID由MAC物理地址创建和标识,因此从服务器获得哪些消息,哪些不是。

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

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

票数 2
EN

Stack Overflow用户

发布于 2018-03-12 19:12:24

我会说Nr2 --因为安全原因(如果你关心的话),而且这是一种非常容易的方法。首先,有4列的数据库应该足够了(日期/时间、ChatroomID、UserID或仅仅是一个名称和消息本身)。如果用户发送新消息,它将创建一个新行,其中包含列所需的所有信息。当您的客户重新加载时,您也可以轻松地迭代它(可能每10秒一次)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49242625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档