一个例子:
说,我在一个人们可以互相交谈的页面上进行AJAX聊天。 如何在人们打开聊天时向人员B,C和D显示(发送)消息?
据我所知,从技术上来说它的工作方式有点不同:聊天(ajax)是从DB(或其他来源)读取,比如每秒,以确定是否有新消息要显示。
但是我想知道是否有一种方法可以在发送新消息时向其他人发送新消息,而不是每秒加载数据库1000次。
请注意,AJAX聊天示例只是一个例子来解释我想要的东西,而不是我想要实现的东西。我只需要知道是否有一种方法可以让特定页面(ajax)上的所有打开的浏览器在服务器上有新内容应该收集。
{抱歉我的英文}
答案 0 :(得分:2)
由于服务器在没有相应请求的情况下无法响应客户端,因此您需要为每个用户的排队消息保持状态。但是,这正是数据库完成的任务。你不能通过用不同的方式替换数据库来解决这个问题。也就是说,你肯定可以做到优化。但请记住,你不应该过早地优化这样的情况;数据库旨在处理极高的流量,并且很可能(事实上,很可能),所描述的场景将由开箱即用的数据库处理得很好。
答案 1 :(得分:1)
您所描述的内容通常被称为'Comet'概念。有关详细信息,请参阅Wikipedia文章,尤其是实施选项(长轮询等)。
答案 2 :(得分:0)
另一个答案是让服务器将更改推送到已连接的客户端,这样只需对数据库进行一次调用,然后服务器就会将更改推送到所有客户端。这article表示这是可能的,但我自己从未尝试过。
答案 3 :(得分:0)
这是非常基本的,但是如果你想坚持使用标准的AJAX解决方案,那么在轮询时减少服务器负载的一种简单方法是获取AJAX调用以转发该客户端的最后收集的注释ID - 然后在服务器端的查询查询中使用它(带有适当的转义),以确保只返回新的注释。