Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 聊天应用程序,如何存储聊天历史记录?_Java_Postgresql_List_Text_Chat - Fatal编程技术网

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

Java 聊天应用程序,如何存储聊天历史记录?,java,postgresql,list,text,chat,Java,Postgresql,List,Text,Chat,我正在用Java开发一个聊天应用程序 所使用的体系结构是服务器-客户端体系结构。 大部分代码是Java,JavaFX用于GUI,PostgreSQL用作数据库 由于这是一个聊天应用程序(桌面),我想知道存储聊天历史记录的最佳方式: 在本地文本文件中,客户端每次都必须读取 在数据库中,类型为String(VarChar) 在服务器中显示为列表 基于以下三种方式的一些问题: 如果客户端从不同的机器连接,文本文件将不在那里 是否可以使用聊天室ID在数据库中存储每个文本条目 服务器在运行期间可以存储多少

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

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

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

  • 在本地文本文件中,客户端每次都必须读取
  • 在数据库中,类型为String(VarChar)
  • 在服务器中显示为列表
  • 基于以下三种方式的一些问题:

  • 如果客户端从不同的机器连接,文本文件将不在那里
  • 是否可以使用聊天室ID在数据库中存储每个文本条目
  • 服务器在运行期间可以存储多少个对象

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

    我遇到了类似的情况,我也在从0开发聊天,唯一的区别是我是在iOS上进行的

    我发展聊天的方式是:

  • 我使用Ubuntu网络服务器

  • 服务器在Mysql中有一个数据库,通过NodeJS与用户进行通信

  • 在NodeJS中,我有一个socket“socket.io”,它方便了用户之间的通知
  • 在iOS设备上,我将接收到的所有消息存储在核心数据中,核心数据是SQLite的扩展
  • 为了根据用户连接的设备获取挂起的消息,我为每个设备使用了一个ID,该ID由MAC物理地址创建和标识,从而从服务器获取哪些消息,哪些不获取
  • 最初,我基于此数据库了解如何构建我的应用程序:

    Socket.IO非常容易使用,最好的是它有不同编程语言的库,下面是它的页面:

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

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

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

    1和3都不是持久的,只有2种方法可以实现。