【问题标题】:An alternate way of reloading a chat after few seconds几秒钟后重新加载聊天的另一种方式
【发布时间】:2014-03-08 23:16:37
【问题描述】:

所以我正在实施一个聊天室。我将从我使用的架构开始。

  • 我有一个room 表,它主要存储有关聊天室的信息,例如参与者人数、主题等。
  • 我有一个存储用户信息的users 表。
  • 我有一个存储帖子的posts 表。这具有来自用户和房间表的外键。
  • 另外,我有一张决赛桌,即在用户和房间之间建立关系。所以它只有房间内的用户的房间 ID 和用户 ID。

现在,我在页面上有三个 div,一个用于聊天区域,另一个用于显示在线人员,然后有一个文本区域用于发布消息。

我目前正在做的是,拥有一个 javascript 函数loadChats(),现在这个方法调用一个 php 文件,该文件只获取该特定房间中的 所有 帖子。同样的内容也被倾倒到我的 div 中,即“聊天室”。 同样,我有一个 loadParticipants() 每隔一秒加载一次用户。

我使用 jquery.post 来达到目的,在方法的最后,我在函数的最后做了一个setTimeout。现在这是我的问题

当然,我可以做得更好。有什么建议?我想了几个。

  1. 在每次调用php时,我都会获取整个聊天记录并将其发送回浏览器,当然我可以检查消息数是否与客户端相同,如果是,那么我不会发送消息。但它会让它变得更好吗?怎么样?
  2. 另外,每隔一秒调用一次服务器端似乎有点过头了。有什么办法可以做到这一点,如果将一些新的聊天添加到posts 表中,那么该特定聊天室会得到通知和更新?即,不要不断地 ping 服务器以请求新请求,只需询问一次,然后等待是否有任何新请求。当该请求完成后,它会再次 ping 服务器以进行下一次更新。

【问题讨论】:

  • 一个建议:不要获取房间中的所有帖子,而是仅获取新帖子(例如检查最后一个帖子的 id)并将它们附加到聊天框。
  • 只需为每个帖子添加一个标志字段......这是读取/不......如果读取设置为1,否则为0......然后只获取带有标志1的帖子......

标签: javascript php jquery refresh


【解决方案1】:

您应该研究一下 websockets(我从未将它们与 PHP 一起使用,但这似乎很有希望:http://socketo.me/)。您可以做的是让服务器在任何新消息进入时将它们推送到客户端,并让每个客户端都推送到服务器等。这样您就不必每 2 次反复 ping 服务器秒,并加载大量数据进行比较。当有新消息时,服务器将其保存到某个数据库中,然后通过所有打开的套接字推送该消息。登录/注销也一样。

编辑:只是浏览了更多页面,他们的教程甚至介绍了如何使用基本的聊天室式功能进行设置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-08
    • 1970-01-01
    • 2017-04-02
    • 1970-01-01
    • 2012-08-11
    相关资源
    最近更新 更多