【发布时间】:2014-03-08 23:16:37
【问题描述】:
所以我正在实施一个聊天室。我将从我使用的架构开始。
- 我有一个
room表,它主要存储有关聊天室的信息,例如参与者人数、主题等。 - 我有一个存储用户信息的
users表。 - 我有一个存储帖子的
posts表。这具有来自用户和房间表的外键。 - 另外,我有一张决赛桌,即在用户和房间之间建立关系。所以它只有房间内的用户的房间 ID 和用户 ID。
现在,我在页面上有三个 div,一个用于聊天区域,另一个用于显示在线人员,然后有一个文本区域用于发布消息。
我目前正在做的是,拥有一个 javascript 函数loadChats(),现在这个方法调用一个 php 文件,该文件只获取该特定房间中的 所有 帖子。同样的内容也被倾倒到我的 div 中,即“聊天室”。
同样,我有一个 loadParticipants() 每隔一秒加载一次用户。
我使用 jquery.post 来达到目的,在方法的最后,我在函数的最后做了一个setTimeout。现在这是我的问题
当然,我可以做得更好。有什么建议?我想了几个。
- 在每次调用php时,我都会获取整个聊天记录并将其发送回浏览器,当然我可以检查消息数是否与客户端相同,如果是,那么我不会发送消息。但它会让它变得更好吗?怎么样?
- 另外,每隔一秒调用一次服务器端似乎有点过头了。有什么办法可以做到这一点,如果将一些新的聊天添加到
posts表中,那么该特定聊天室会得到通知和更新?即,不要不断地 ping 服务器以请求新请求,只需询问一次,然后等待是否有任何新请求。当该请求完成后,它会再次 ping 服务器以进行下一次更新。
【问题讨论】:
-
一个建议:不要获取房间中的所有帖子,而是仅获取新帖子(例如检查最后一个帖子的 id)并将它们附加到聊天框。
-
只需为每个帖子添加一个标志字段......这是读取/不......如果读取设置为1,否则为0......然后只获取带有标志1的帖子......
标签: javascript php jquery refresh