0

我正在使用 Parse.com 的 httpRequest 来检索网站的源代码。

代码:

Parse.Cloud.define("extract_website_simple", function(request, response) 
{
    return Parse.Cloud.httpRequest({url: 'http://bet.hkjc.com/marksix/index.aspx?lang=en' }).then
    (function(httpResponse) 
    {           
        response.success("code=" + httpResponse.text);
        }, 
        function (error) 
    {
        response.error("Error: " + error.code + " " + error.message);
        });
});

问题:

无法检索 html 代码。而是在加载10秒后出现了ParseException,写法如下:

com.parse.ParseException: i/o failure: java.net.SocketTimeoutException: Read timed out

我怎样才能在没有超时的情况下正确检索它?似乎没有办法增加超时长度?

谢谢!

4

1 回答 1

0

正如官方 Q/A等许多地方的 Parse 支持所强调的那样,超时时间很低,并且不会更改它们以保持良好的性能。引用:

Héctor Ramos:我认为在 Cloud Code 中任何时候都只能运行两个操作,因此当您并行发送三个查询时,第三个查询要等前两个查询中的至少一个完成后才会开始。Cloud Functions 不是长时间运行操作的最佳工具,因此它们被限制在 15 秒内,以保持 Cloud Code 对所有人都有效。一个更好的长期运行的解决方案应该很快就会出现。

官方文档说:

资源限制 -> 超时

云函数将在挂钟时间 15 秒后终止。beforeSave、afterSave、beforeDelete 和 afterDelete 函数将在运行 3 秒后终止。如果从另一个 Cloud Code 调用中调用 Cloud 函数或 beforeSave/afterSave/beforeDelete/afterDelete 函数,则会进一步受到调用函数剩余时间的限制。例如,如果一个 beforeSave 函数在运行 13 秒后被云函数触发,则 beforeSave 函数将只有 2 秒的运行时间,而不是正常的 3 秒。

因此,即使每月向他们支付数千美元,他们也不会让您的函数运行超过 10-15 秒。Parse 不是万能的工具,而且非常具体。我一直都遇到限制,例如缺乏对带有许多附件的多部分表单的支持。

Parse.Cloud.job

为了支持最多 15 分钟的解析请求,您可以选择使用后台作业。它们支持Promises,与.then典型的匿名回调相比,它可以高度节省服务器资源。

如果您使用免费版,您将不会喜欢另一个限制:Apps may have one job running concurrently per 20 req/s in their request limit,因此您只能在应用程序中运行单个后台作业,如果您尝试打开另一个:Jobs that are initiated after the maximum concurrent limit has been reached will be terminated immediately。要运行 4 个后台作业,您必须以当前价格支付 700 美元/平方米。


如果你需要更多的时间或更少的钱来一次解析几十个页面,你可以选择不同的技术来支持网页抓取。有很多选择,我个人最喜欢的是:

节点.js

如果你喜欢服务器端的 JavaScript,你可以试试 Node.js。要从基础开始,您可以遵循schoch.io 教程

PHP

具有数千个示例的另一种替代方法是 PHP。您可以从stackoverflow 本身的类似教程的答案开始。

于 2015-07-13T11:03:44.593 回答