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?)检查是否有新消息在数据库中的这两个用户之间。
我的问题是:
- 当数据库中有很多消息时,数据库对 运行 这种 SQL 语句每 X 秒的要求有多大?
- 如果每分钟发出数千个请求,我的方法是否足够好?
- 是否有任何 better/faster 方法来确定用户 A 是否向用户 B 发送了一条新消息,然后将其显示在聊天中 window?
你真的应该为此使用 WebSockets 但如果你真的想进行轮询,你可以这样做:
您的系统应该包含 Conversations、Users 或 Participants 和 消息.
当 John 第一次与 Mary 开始对话时,您创建了一个新的 对话,具有独特性conversation_id
。该对话的参与者是Mary和John。
当用户首次打开过去的 对话 时,您 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 等传统服务器技术无法很好地应对这些情况。
我正在开发一个网站,除其他外,该网站允许用户彼此实时聊天(类似于 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?)检查是否有新消息在数据库中的这两个用户之间。
我的问题是:
- 当数据库中有很多消息时,数据库对 运行 这种 SQL 语句每 X 秒的要求有多大?
- 如果每分钟发出数千个请求,我的方法是否足够好?
- 是否有任何 better/faster 方法来确定用户 A 是否向用户 B 发送了一条新消息,然后将其显示在聊天中 window?
你真的应该为此使用 WebSockets 但如果你真的想进行轮询,你可以这样做:
您的系统应该包含 Conversations、Users 或 Participants 和 消息.
当 John 第一次与 Mary 开始对话时,您创建了一个新的 对话,具有独特性
conversation_id
。该对话的参与者是Mary和John。当用户首次打开过去的 对话 时,您
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 等传统服务器技术无法很好地应对这些情况。