我正在使用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
如何在不超时的情况下正确检索?似乎没有办法增加超时长度?
谢谢!
正如许多地方(如官方问答)的Parse支持所强调的那样,超时很低,不会为了保持良好的性能而更改。报价:
Héctor Ramos:我认为在云代码中,任何时候都只能运行两个操作,所以当你并行发送三个查询时,第三个查询要等到前两个查询中至少有一个完成后才能启动。云函数并不是长时间运行操作的最佳工具,因此它们被限制在15秒内,以保持云代码对每个人的性能。对于长时间运行的操作,一个更好的解决方案应该很快就会出现。
官方文件显示:
资源限制->超时
云功能将在挂钟时间15秒后失效。beforeSave、afterSave、beforeDelete和afterDelete函数将在运行3秒后终止。如果从另一个"云代码"调用Cloud函数或beforeSave/afterSave/afterDelete/afterDelete函数,则它将进一步受到调用函数中剩余时间的限制。例如,如果beforeSave函数在运行13秒后被云函数触发,则beforeSave功能将只有2秒的运行时间,而不是正常的3秒。
因此,即使每月向他们支付数千美元,他们也不会允许你的功能运行超过10-15秒。Parse并不是一个适用于所有事物的工具,而且非常具体。我总是遇到一些限制,比如缺乏对带有许多附件的多部分表单的支持。
分析。Cloud.job
为了支持最长15分钟的解析请求,您可以选择使用后台作业。它们支持带有.then
的Promises,它在典型的匿名回调中高度节省了服务器资源。
如果你使用免费版,你不会喜欢另一个限制: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美元/米。
如果你需要更多的时间或更少的钱一次解析几十个页面,你可以选择不同的技术来支持网络抓取。有很多选择,我个人最喜欢的是:
Node.js
如果你喜欢服务器端的JavaScript,你可以试试Node.js。从基础开始,你可以遵循schoch.io教程。
PHP
另一个有数千个例子的替代方案是PHP。您可以从stackoverflow本身的教程式答案开始。