从 ubuntu 服务器向浏览器推送数据
Posted
技术标签:
【中文标题】从 ubuntu 服务器向浏览器推送数据【英文标题】:Pushing data to browser from ubuntu server 【发布时间】:2014-11-15 11:49:31 【问题描述】:我有一个网络应用程序,它几乎是一个网络爬虫。 Web 爬虫脚本通过 ajax 调用从客户端的浏览器调用(基本上是启动 php 脚本,然后调用 Perl 脚本来完成繁重的工作)。因为脚本正在抓取大量数据,所以它需要一两分钟才能完成。我试图找出将数据从 perl 脚本实时推送到用户浏览器以显示某种“进度”的最佳方式,而不是仅仅显示一两分钟的加载动画。 该应用程序托管在我自己的 Ubuntu VPS 上,因此我可以使用我喜欢的任何技术。解决这个问题的最佳方法是什么?
【问题讨论】:
【参考方案1】:由于您已经在使用 perl,您可能会考虑将您的脚本变成一个“异步”应用程序,该应用程序在使用 perl 时会抓取并“推送”某种更新。你可以使用Mojolicious 之类的东西,或者许多 Plack/PSGI 服务器替代品之一(例如:Twiggy、Starlet、Kelp等、 c.f. CPAN)这将允许您将脚本作为单独的应用程序运行。
使用部分抓取结果更新页面可能有点棘手,但如果您能从教程和“如何”类型的文章中弄清楚如何让您的抓取工具以这种方式运行:
Mojolicious Cookbook 解决问题的示例方法 - 当我使用 RTFM 时,我喜欢从这里开始。 Basic Mojolicious AJAX example 简单的一个文件示例。另请参阅 Mojolicious 和 Twiggy 文档和示例。并查看有关使用它们的讨论:
Writing websocket chat using Mojolicious Lite(现在有 Convos 用于聊天) PSGI, AnyEvent, Twiggy ... 讲述了 perlmonk 使用这些工具的冒险经历 Mojolicious websocket with server-side repeating events。在您的情况下,客户端/服务器请求将运行事件,但这可能有助于作为调试示例。.. 然后您可以将更新后的脚本挂接到您现有的服务器基础架构中。一种方法是将闪亮的新“websocket 脚本”连接到一个目录(使用像 ProxyPass
或等效的 Apache 指令),客户端请求可以访问该目录。
--
另请参阅@creaktive's 示例以获取"ultimate" answer to the web scraper in Modern Perl question http://blogs.perl.org ...
【讨论】:
Twiggy 是一个服务器,它与 Mojolicious 应用程序一样有什么帮助? 当时认为 OP 可以在单独的环境中将抓取应用程序作为服务器而不是脚本运行。也许在这里特别提到 Twiggy 并没有帮助。 虽然我会推荐 Mojolicious,但如果您想推荐替代方案,您可以只提及 PSGI。除此之外的部署选项很多,Twiggy 就是其中之一。 @creaktive 也已添加 :-) fyi,我在这里将我对@creaktive 的回答正式化为要点:gist.github.com/jberger/5153008【参考方案2】:您可以使用 nodejs 和进度插件 (https://www.npmjs.org/package/progress)
【讨论】:
以上是关于从 ubuntu 服务器向浏览器推送数据的主要内容,如果未能解决你的问题,请参考以下文章