AJAX 聊天应用程序的刷新率

Refresh rate for AJAX chat application

我正在开发一个网站,除其他外,该网站允许用户彼此实时聊天(类似于 Facebook 聊天)。消息存储在MySQLtablemessages中,其中包含消息ID、发送者ID、接收者ID和时间。

当用户 A 与用户 B 聊天时,我通过 SQL 语句 SELECT * FROM messages WHERE (senderID='userA' AND receiverID='userB') OR (senderId='userB' AND receiverID='userA') 获取他们所有的消息。此语句检索用户 A 和用户 B 之间的所有消息。

打开聊天后,我每秒发送一个AJAX请求(应该是less/more?)检查是否有新消息在数据库中的这两个用户之间。

我的问题是:

你真的应该为此使用 WebSockets 但如果你真的想进行轮询,你可以这样做:

您的系统应该包含 ConversationsUsersParticipants消息.

  • John 第一次与 Mary 开始对话时,您创建了一个新的 对话,具有独特性conversation_id。该对话的参与者MaryJohn

  • 当用户首次打开过去的 对话 时,您 SELECT * FROM messages WHERE conversation_id = 'xyz'.

  • 从那时起,当约翰向玛丽发送消息时,您只需 INSERT 数据库中的该消息。

  • 当玛丽发送下一个轮询信号时,她在消息中包含她收到的 最后一个 message_id。这允许您 SELECT * FROM messages WHERE message_id > 115 AND conversation_id = xyz.

  • Mary 然后将新消息附加到她现有的消息列表。

这假定 message_id 是一个自动递增的列。

其他提示:

  • 比 long-polling 更喜欢 WebSockets。它们更有效,因为 server/clients 之间的通信仅在需要时发生,即发送消息时。
  • 更喜欢 non-blocking 服务器技术,例如 NodeJS。聊天应用程序围绕着极其频繁地来回发送的小数据展开。 PHP 等传统服务器技术无法很好地应对这些情况。