【发布时间】:2012-02-26 15:23:04
【问题描述】:
我正在创建一个需要实时通知系统的网络应用。我将如何设置我的服务器以从 mySQL 数据库中提取数据,然后将其推送到浏览器。我绝对 不 知道如何做到这一点。如果有人可以提供帮助,将不胜感激!太感谢了!
编辑:我可能应该更具体一些,我正在提取数据,因为 XYZ 最近创建了一个帐户,XZY 最近...非常感谢!
【问题讨论】:
我正在创建一个需要实时通知系统的网络应用。我将如何设置我的服务器以从 mySQL 数据库中提取数据,然后将其推送到浏览器。我绝对 不 知道如何做到这一点。如果有人可以提供帮助,将不胜感激!太感谢了!
编辑:我可能应该更具体一些,我正在提取数据,因为 XYZ 最近创建了一个帐户,XZY 最近...非常感谢!
【问题讨论】:
您无法将数据推送到浏览器,但您可以设置网页每隔几秒轮询一次服务器以获取更新。一个示例设置是:
在您的网站中,有一个 JavaScript 函数,每隔几秒(或任何最适合您情况的时间间隔)在计时器上运行一次。
在页面加载时启动该计时器。
该 javascript 函数调用对您的网络服务器上的网络服务的 AJAX 调用(稍后会详细介绍)。
在服务器端,您需要某种系统来跟踪这些事件并将它们存储在某个位置,例如带有时间戳的数据库表中。因此,例如当 XYZ 创建一个帐户时,该帐户将记录在数据库中的这个“事件”表中。
然后,由 AJAX 调用调用的 Web 服务将对该表运行查询并检索自上次调用以来的所有条目。然后用这些结果更新网页。
这显然不是 100% “实时”,因为根据您在 JS 计时器中设置的时间间隔会有一个小的延迟,但它非常接近。
【讨论】:
您可以使用 websocket 为您的网站创建推送通知服务,并为不支持 websocket 的浏览器优雅降级为长轮询后备。这确实需要大量的技术/编程知识。
一些很好的资源是: http://socket.io(它使用 node.js 后端作为 Web 套接字并处理降级) http://pusherapp.com(如果您不想滚动和维护自己的服务,这是一个商业解决方案)
对于支持 websockets 的浏览器列表,您可以搜索“caniuse”——它提供了浏览器版本支持的功能的详细信息
注意:对于像 Facebook 这样的数百万用户应用程序,我假设他们已经权衡了为 50 多万同时用户运行 websocket 的优势,并得出结论,在连接到数百万个套接字的所有节点之间保持数据一致将是太多了。我可以想象,在套接字系统上而不是在类似 sql 的基本操作基础设施上执行此操作将是一场逻辑噩梦。我不能代表他们发言,这只是我的假设。但是,您会惊讶于最近有多少网站在使用推送和轮询系统:)
【讨论】: