PHP - AJAX jQuery 服务器“推”系统

8

我正在创建一个需要实时通知系统的web应用程序。 我该如何设置服务器来从mySQL数据库拉取数据,然后将其推送到浏览器。 我绝对不知道如何做这个。 如果有人能帮忙,那就太感谢了!非常感谢!

编辑:我可能需要更具体一些,我的意思是拉取数据,例如XYZ最近创建了一个帐户,XYZ最近...... 非常感谢!

2个回答

13

你不能直接向浏览器推送数据,但你可以设置网页每隔几秒钟向服务器轮询更新。一个示例设置如下:

在你的网站中,有一个javascript函数,每隔几秒钟(或者任何适合你情况的时间间隔)在定时器上运行。

在页面加载时启动该定时器。

该javascript函数调用一个web服务上的AJAX调用(稍后详细说明)。

在服务器端,你需要一些系统来跟踪这些事件并将它们存储在某个地方,比如在带有时间戳的数据库表中。例如,当XYZ创建一个帐户时,该事件将记录在数据库的“事件”表中。

AJAX调用的web服务将在该表上运行查询,并检索自上次调用以来的所有条目。然后只需使用这些结果更新网页。

显然这不是100%“实时”的,因为取决于你在JS定时器中设置的时间间隔,会有一小段延迟,但它非常接近实时。


2
此外,请查看Pusher长轮询。+1 - drew010
非常感谢!我一直在互联网上寻找这个。非常详细和好的想法。从未想过这一点,看着Facebook中的网络请求,这就是他们所做的。每219毫秒确切地说。最后一个问题,使用这种方法,服务器在多年运行数百万次请求后是否会变得非常拥挤?谢谢! - Joe Torraca
让服务器变慢的可能性主要与您的 Web 服务有多复杂以及在任何给定时刻您的流量有多大有关。换句话说,如果服务需要进行多次查找或其他重型处理,并且您以高频率轮询该服务,则您的服务器可能会变慢。但是,如果您只是执行简单的单个查询并返回结果,那么假设您的数据库服务器没有太大负载,那么应该没问题。 - TheOx
好的,谢谢。我非常怀疑我的服务器会被拖垮。 - Joe Torraca

7
您可以利用Websockets和优雅降级到长轮询回退来为您的网站创建推送通知服务,以适应不支持Websockets的浏览器。这确实需要相当数量的技术/编程知识。
一些很好的资源包括: http://socket.io(使用node.js后端处理Websockets和降级) http://pusherapp.com(商业解决方案,如果您不想自己维护)
要查找支持Websockets的浏览器列表,您可以搜索“caniuse”--提供浏览器版本支持功能的详细信息。
注意:对于像Facebook这样的千万用户应用程序,我会假设他们已经权衡了运行Websockets以支持5000万个同时用户的优势,并得出结论,保持所有连接到数百万个套接字的节点上的数据一致性将是太多了。我可以想象,在套接字系统而不是基本操作sql-like基础架构上执行此操作将是一个逻辑噩梦。但是,有多少网站最近一直在使用推送和轮询系统,您可能会感到惊讶 :)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接