gpt4 book ai didi

javascript - 基于 Ajax 的聊天的数据库架构

转载 作者:行者123 更新时间:2023-11-28 07:42:33 25 4
gpt4 key购买 nike

首先,我完全意识到 web-sockets 和 comet 是比 AJAX 更好的方法,但我试图使我的代码尽可能简单,所以我现在使用 AJAX。

上下文

目前,获取特定对话消息的 PHP 代码(使用“cid”)嵌入在用户查看消息的页面中。因此,仅在每次刷新页面时才加载消息。因此,我决定创建一个基于 AJAX 的系统,它以设定的时间间隔(即 5 秒)为我获取消息。

问题

作为 AJAX 请求结果执行的 SQL 代码显然只需要返回当前未显示在屏幕上的消息,否则完整的对话将每 5 秒回显到屏幕上。因此,AJAX 需要有一种方法来确定消息是否已经在屏幕上,我认为这需要使用数据库字段来完成,但我不知道如何实现。

当前数据库架构

(我会发布图片,但我的声誉太低。)

Message_id(主键)、cid(消息也属于哪个 session )、message、sent_user、receive_user、sent_time。

我使用的是 AJAX,没有 jQuery。

最佳答案

如果 message_id 是自动递增的,则应该可以用于测试消息是否已显示。只需跟踪客户端收到的最高 message_id 即可。 (这是假设您每 x 秒发送一次所有消息,而不是一次发送一条消息。)

它可以是一个 session 变量,或者您可以通过Ajax将最高的id返回给客户端,并保留一个保存收到的最高message_id的js变量,然后在ajax中的请求参数中将其发送回服务器,并在 SQL 查找中使用它

... where message_id > highest_mid_received and ...

实际上我之前就这样做过,我想我是通过跟踪客户端上的最高 ID 来做到的。如果您通过 Ajax 返回 json,这将使发送消息和 id 变得简单。我认为当我这样做时,我只是使用了带有分隔符的字符串,并在 Javascript 中使用了 split ,而且这也有效,尽管它现在由于 json 而变得过时了。

如果您担心用户意外关闭选项卡并希望他们在打开页面的新选项卡时自动再次获取所有消息,则在客户端上保留变量更有意义。如果这不是问题,或者您肯定希望他们在关闭选项卡并在同一页面启动新选项卡后不再收到所有消息,那么在 session 中进行跟踪更有意义。

关于javascript - 基于 Ajax 的聊天的数据库架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27844953/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com