从 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、Kelpc.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 服务器向浏览器推送数据的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法从 Google appengine 标准向网络浏览器发送推送通知? [关闭]

PHP+SSE服务器向客户端推送消息

PHP+SSE服务器向客户端推送消息

webSocket--服务器将数据主动推送给客户端

无法从 Parse 仪表板发送推送通知

服务端向客户端推送消息:轮询,长轮询(兼容性好),以及websocket(主流浏览器都支持)