Tag: networking抓取

数据从一个函数的asynchronous执行与另一个函数的执行混合在一起

我一直在使用Cheerio,node-fetch和fs-extra编写一个基于NodeJS构build的Web抓取API。 在下面的一段代码中,我调用getReport方法,为config.supportedMountains数组中的每个string。 对于每一个项目,我想通过fetchAndStore函数运行它们,这使得html请求,通过特定的parsing器运行它,然后存储json结果。 // const fs = require('fs-extra'); const _ = require('lodash'); // const Promise = require('promise'); const schedule = require('node-schedule'); const fetchAndStore = require('./fetchAndStore.js'); const config = require('../config.js'); exports.run = function() { schedule.scheduleJob('*/20 * * * * *', function() { // Get the most recent reports // And write them to storage _.forEach(config.supportedMountains, function(fName) […]

一个调查网站,Node.js数据收集anamoly上heroku

我正在一个包含表单的网站上工作。 我的要求是收集每个用户的所有表单数据。 它是一个资金紧张的学术项目,因此我使用了heroku免费服务器空间。 我select了node.jsexpression式框架。 创build一个简单的表单,并在提交时,它写入一个json的文件。 以下是代码。 //require the express nodejs module var express = require('express'), //set an instance of exress app = express(), //require the body-parser nodejs module bodyParser = require('body-parser'), //require the path nodejs module path = require("path"); var fs = require("fs"); //support parsing of application/json type post data app.use(bodyParser.json()); //support parsing of application/x-www-form-urlencoded […]

如何在Android上运行Node.js代理encryption服务?

我正在使用Dory(Android上的Node.js运行时),并尝试在我的手机上使用代理encryption服务。 encryption服务在1080上进行侦听,并将常规的networking请求转换为encryption的包并发送到我的服务器,有点像VPN,但不是真的。 面临的挑战是,尽pipe节点代理encryption服务在其他平台上运行良好,但似乎并不适用于Android。 我改变我的代理到我的wifi设置127.0.0.1:1080。 Dory上的日志(STDOUT)显示零运行时错误,并且显示它接收到networking请求包(并且显示没有encryption它们的错误),但是在超时时显示所有的networking请求。 我也看不到从我的手机发出的任何networking请求。 Dory有没有networking访问?

如何处理Node.js中的“读取ETIMEDOUT”?

我有一个pub / sub模型,使用Node.js将数据从一个客户端传输到另一个客户端。 此外,服务器还会logging收到的所有内容并发送给新客户端。 但是,一些数据在传输时被破坏,并且出现如下错误: Error with socket! { [Error: write EPIPE] code: 'EPIPE', errno: 'EPIPE', syscall: 'write' } Error with socket! { [Error: read ETIMEDOUT] code: 'ETIMEDOUT', errno: 'ETIMEDOUT', syscall: 'read' } 我不知道如何正确处理这些错误。 看起来客户端已经closures了。 由于服务器只是像服务器这样的代理服务器,所以并不知道数据是什么意思。 遇到这些错误之前,我不知道如何validation每个数据包。 这是我的代码: // server is an object inheriting from net.Server server.on('listening', function() { var port = server.address().port; }).on('connection', function(cli) […]

减less无限循环中的phantomjs / casperjs / spookyjs内存使用

我试图刮一个页面,使用phantomjs casperjs和幽灵般的无限滚动。 它应该继续点击更多的button,并从结果中的新链接,直到手动停止。 然而脚本开始使用越来越多的内存,直到它崩溃。 我写了下面的脚本,有没有一种方法来优化它,所以它不会使用更多的内存: function pressMore(previousLinksLength) { this.click('#projects > div.container-flex.px2 > div > a'); this.wait(1000, function() { links = this.evaluate(function() { var projectPreview = document.querySelectorAll('.project-thumbnail a'); return Array.prototype.map.call(projectPreview, function(e) { return e.getAttribute('href'); }); }); this.emit('sendScrapedLinks', links.slice(previousLinksLength)); // repeat scrape function pressMore.call(this, links.length); }); } // spookyjs starts here spooky.start(scrapingUrl); //press the more button spooky.then(pressMore); […]

在Heroku和node.js的每个请求上运行的后台作业

我有一个应用程序需要运行一个非常漫长的过程(每个请求需要30-60秒)。 处理结束后,返回结果作为响应。 这工作正常,但它崩溃了我的Heroku实例。 我想要发生的是: 用户来到现场,请求发送到后端 后端立即返回,并开始执行处理的另一个进程/任务/作业 处理结束后,响应将返回给正确的用户。 我不确定我需要什么。 基于一个小时的研究,似乎我可以使用Redis作为队列,工作人员可以每隔x分钟轮询一次。 但是我不能理解的是如何计算出处理结束后发送响应的请求。 有没有一个示例Express / node.js? 任何指针都是有帮助的。

使用node.js作为游戏服务器来跟踪游戏状态

我正处于移动多人游戏实时游戏的规划阶段,我正在考虑采用什么架构来跟踪游戏大厅的状态。 我已经考虑过让游戏成为点对点,在同一个游戏大厅(最多4个玩家)内的所有设备随着游戏的进展而将其位置发送给其他玩家。 我也考虑让玩家连接到服务器和服务器,跟踪游戏状态并将状态发送给每个玩家。 如果我走这条路线并使用节点来实现服务器,那么我需要考虑哪些问题? 我有一个预测,可扩展性将成为一个主要问题,因为服务器必须跟踪名义上以每秒60帧运行的每个游戏大厅的状态。 如果我有100个积极的游说者,我可以预见可能出现的问题。 这是否会是这样,我应该看看不同的networking架构? 或者我可以获得巨大的容量,直到服务器达到最大值?

关于我的公共IP的Hack.chat

所以,我前几天发现这个很酷的聊天。 https://github.com/AndrewBelt/hack.chat 我设法安装它,一切正常。 服务器在127.0.0.1:6060 ,客户端(通过http-server运行在0.0.0.0:8080 。 所以我跑了,在本地,它的工作。 所以我想知道如何使用我的公共IP在互联网上公开聊天呢? 转到config.js 将主机更改为我的公共IP xx.xxx.xx.x 然后我尝试使用node server.js启动服务器,这里的问题开始! root @ user:〜/ hack.chat#npm start hack.chat@1.0.0 start /root/hack.chat 节点server.js 在88.169.22.4:6060启动服务器 events.js:85 扔呃; //未处理“错误”事件 ^ 错误:听EADDRNOTAVAIL 在exports._errnoException(util.js:746:11) 在Server._listen2(net.js:1139:19) 在听(net.js:1182:10) 在net.js:1280:9 在process._tickCallback(node.js:355:11)的dns.js:85:18 在Function.Module.runMain(module.js:503:11) 在启动(node.js:129:16) 在node.js:814:3 npm ERR! Linux 3.19.0-22-generic npm ERR! argv“/ usr / bin / node”“/ usr / bin / npm”“start” npm ERR! […]

具有node.js的Webworkers表示应用程序

我是node.js的新手,正在尝试构build一个快速应用程序。 到目前为止,我已经安装了一个应用程序,并创build了一些基本路线。 我的应用程序的入口点是一个文件,我正在使用应用程序设置服务器: #!/usr/bin/env node /** * Module dependencies. */ var app = require('../app'); var debug = require('debug')('main'); var http = require('http'); /** * Get port from environment and store in Express. */ var port = normalizePort(process.env.PORT || '3000'); app.set('port', port); /** * Create HTTP server. */ var server = http.createServer(app); /** * Listen on […]

Cheerio Web Scrape如何在webscrape内部进行webscrape

我有一个特定的页面,我已经从中获取了一些数据,但为了收集更多的信息,我需要关注另一个href链接来收集更多的数据,而我不知道如何。 这是我到目前为止: router.get("/:id",function(req,res){ var url = "www.someurl.com" request(url, function (error, response, html){ if (!error && response.statusCode == 200){ $ = cheerio.load(html); $('div.ProductDetails').each(function(){// function for details var self = this; var a = $(this).children().children(); details = a.attr('href'); details = { details:details }; 这给我一个链接到细节部分与实际的细节。 我只需要知道如何在刮擦里面刮一下。