AJAX聊天应用程序的刷新率

时间:2018-02-25 21:06:57

标签: javascript sql ajax chat

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

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

当聊天打开时,我每秒都发送一个 AJAX请求(应该是更少还是更多?)来检查数据库中这两个用户之间是否有新消息。

我的问题是:

  • 当数据库中有大量消息时,数据库每隔X秒运行那种SQL语句的要求有多高?
  • 如果每分钟有数千个请求,我的方法是否足够好?
  • 是否有更好/更快的方法来确定用户A是否向用户B发送了新消息,然后将其显示在聊天窗口中?

1 个答案:

答案 0 :(得分:2)

你应该真的使用WebSockets,但如果你真的想要进行民意调查,你可以这样做:

您的系统应该包含对话用户参与者消息

  • John 第一次使用 Mary 启动对话时,您创建一个新的对话,其中包含唯一的{{ 1}}。该对话的参与者 Mary John

  • 当用户首次打开过去对话时,您conversation_id

  • 从那时起,当John向Mary发送消息时,您只需在数据库中SELECT * FROM messages WHERE conversation_id = 'xyz'发送该消息。

  • 当Mary发送下一个轮询信号时,她在她的消息中包含了她收到的 last INSERT。这样您就可以message_id

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

这假定SELECT * FROM messages WHERE message_id > 115 AND conversation_id = xyz是一个自动递增的列。

其他指示:

  • 首选WebSockets进行长轮询。它们更有效,因为服务器/客户端之间的通信仅在需要时发生,即发送消息时。
  • 首选非阻塞服务器技术,如NodeJS。聊天应用程序围绕着非常频繁地来回发送的小数据。像PHP这样的传统服务器技术并不能很好地处理这些情况。