几秒钟后重新加载聊天的另一种方法

时间:2014-02-11 09:03:49

标签: javascript php jquery refresh

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

  • 我有一个room表,基本上存储了关于聊天室的信息,如参与者的数量,主题等等。
  • 我有一个users表,用于存储用户信息。
  • 我有一个posts表来存储帖子。这有来自用户和房间表的外键。
  • 另外,我有一个决赛桌,用户和房间之间有关系。所以它只有来自用户的房间和用户ID。

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

我目前正在做的是拥有一个javascript函数loadChats(),现在这个方法调用一个php文件,该文件只提取所有该特定房间中的帖子到现在为止。同样被抛入我的div,即“聊天室”。 此外,类似地,我有loadParticipants()每隔一秒加载用户。

我正在使用jquery.post用于此目的,在方法的最后,我在函数的末尾执行setTimeout。现在这是我的问题

当然,我可以做得更好。有什么建议?我想的是一些。

  1. 每次调用php,我都会得到整个chathistory并将其发送回浏览器,当然我可以检查消息的数量是否与客户端相同,如果是,那么我就不会发送消息。但这会让它变得更好吗?怎么样?
  2. 此外,每隔一秒对服务器端进行一次调用似乎有点太过分了。有没有办法做到这一点,如果将一些新的聊天添加到posts表,那么该特定的聊天室会被通知和更新?即,不是一直ping服务器以询问新请求,只需询问一次,等待是否有新的事情。当该请求完成后,它会再次ping服务器以进行下一次更新。

1 个答案:

答案 0 :(得分:1)

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

编辑:只需仔细查看页面,他们的教程甚至会介绍如何使用基本的聊天室功能进行设置。