Tag: networking抓取

当使用Cheerio和NodeJS进行search时,Object#<Object>没有方法'attr'

当在Node JS中跟随一个关于网页抓取的教程时,我在terminal中运行这个脚本时遇到了这个问题: Object #<Object> has no method 'attr' 这是我正在使用的脚本: var request = require('request'), cheerio = require('cheerio'), urls = []; request('http://www.reddit.com', function (err, resp, body) { if (!err && resp.statusCode == 200) { var $ = cheerio.load(body); $('a.title', '#siteTable').each(function() { var url = this.attr('href'); urls.push(url) }); console.log(urls); } }); 任何想法如何解决这个脚本,所以它不会抛出一个错误? 任何帮助将非常感激!

节点HTTP服务器的最高性能?

我正在运行一个testing,试图从节点HTTP服务器获得最大的传输速度。 这是一个简单的服务器。 在我的testing中,我有50K的虚拟客户端build立与服务器的永久连接(我之前运行ulimit -n 99999)。 然后,在另一个事件,一个HTTP连接到不同的端口,服务器发送一个消息到每个虚拟客户端。 最后,所有客户端都收到相应的消息。 在我的testing中发送所有消息需要几分钟。 有没有任何build议可以帮助我改进这些测量,以便我可以在几秒钟内发送5万条消息而不是几分钟? 服务器在m1.medium AWS实例中运行。 这个想法是用相同的平台来提高性能。 复制服务器代码: var http = require("http"); var connectionResponse = []; var connectionIndex = 0; http.createServer(function(request, response) { console.log("Received connection " + connectionIndex); response.setTimeout(1200000, function() { console.log("Socket timeout"); }); connectionResponse[connectionIndex] = response; connectionIndex++; }).listen(8888); http.createServer(function(request, response) { console.log("8887 connected – Will respond"); response.writeHead(200, {"Content-Type": "text/plain"}); […]

我应该使用AJAX还是WebSockets?

呵呵, HTTP和WebSockets这个令人愉快的问题再次出现,但是即使在阅读数百篇关于博客文章,SO问题等等之后,我仍然完全丧失了我应该做的事情正在努力为我们的应用程序。 在这篇文章中,我将提供有关应用程序function的信息,以及当前在我们的应用程序中使用的请求/响应的types。 目前我们的应用程序是一个草率的工作,一起使用AngularJS和AJAX请求到一个运行PHP的Apache服务器,即XAMPP 。 随着我们的应用程序的启动,我注意到,当服务器处于任何负载下时,我们遇到了响应时间的问题。 这可能与我们服务器的臃肿架构,硬件以及我们的MySQL数据库没有完全优化的事实有关。 然而,有了这样一个忠实的粉丝群和投资者看到我们的应用程序的潜力,并给我们一个机会推出2.0我一直在努力研究如何将这个应用程序变成一个低延迟的可扩展性的强大。 老实说,最好的select是hire someone with experience ,但不幸的是,我是一个业余爱好者,也是一个没有太多经验的一人军队。 经过一番广泛的研究,我决定这次使用NodeJS编写后端。 但是,我很难决定HTTP或Websockets 。 以下是在服务器/客户端之间完成的事务types。 客户端以JSON格式向服务器发送请求。 请求有几个不同的东西。 请求ID(用于基于请求的处理逻辑) 与请求ID关联的数据。 服务器接收请求,轮询数据库(如有必要),然后以JSON格式响应客户端。 有时服务器正在向客户端提供文件。 即Base64格式的图像。 目前,应用程序(在使用时)每次更改接口时都会向服务器发送请求,平均而言,我们的应用程序每隔几秒就会发送一次请求。 我们接口上的每个操作都会向服务器发送另一个请求。 应用程序还会每隔8秒发送一次检查通知/消息的请求(或者根据消息接口是否为2秒)。 目前这里是我看到的与我们的应用程序stateless连接的一个stated连接的好处。 如果连接被声明,我可以消除对通知和消息的请求,因为服务器只要有一个可用就告诉客户端。 这可以消除每秒x(n)/4请求到服务器。 处理类似从服务器断开连接的事情就像试图重新连接一样简单,而不是每个请求处理超时/错误,这只能在套接字上处理。 通过删除用于数据库交互的安全密钥可以获得额外的安全性,这可以防止Hijacking(?) session_key并使用它来操纵或访问其他用户数据的可能性。 由于AJAX设置中没有状态,因此只需要session_key。 不过,我是通过TCP游戏服务器仿真开始学习编程的人。 所以我理解STATE连接的some好处,但是我根本不明白STATELESS连接的好处。 我知道他们都有他们的好处和怪癖,但我很好奇什么是对我们最好的方法。 我们主要是在寻找可伸缩性,因为我们有一个本地应用程序的启动,并在48小时内成为近10,000个用户的瓶颈。 幸运的是,我宣布这是一个BETA ,用户在了解到我自己作为一个学习项目完成之后,正在削减我很多的负担。 我已经禁用注册,同时考虑改进应用程序的前端和后端。 重要: 如果使用WebSockets,我们可以像使用AJAX那样asynchronously从服务器上下载图片吗? 例如,我可以使用AJAX为5个不同的图像向服务器发出5个请求,并且他们都将立即开始下载,使用一个规定的连接,我将不得不等待每个照片进行stream式传输,然后才能转到下一个请求? 这仅仅是一个单一用户,还是等待请求完成的每个用户?

无法从不同的networkingexpress.js进行连接

我正在尝试使用node.js和express.js。 当我尝试从我的networking中的任何一台计算机连接到我的Web服务器时,它可以正常工作,但是当我尝试从外部networking连接时,连接超时。 var app = require('express')(); var http = require('http').Server(app); app.get('/', function(req, res) { res.send("Hello World"); }); http.listen(3000, '0.0.0.0', function() { console.log("Listening on port 3000!"); });

服务工作人员不能以脱机模式与节点js服务器一起工作

我正在尝试使用脱机的第一个策略来构buildPWA 。 源文件的服务器是一个NodeJS服务器 。 我目前正在一个本地主机节点服务器上testing这个(不确定它是否有影响?)。 服务人员+caching似乎很好,但在离线模式下,我只能得到Chrome离线页面 。 让我们进入细节: 通过http:// localhost:8080 / place / test url提供的页面有一些客户端JS,我在其中注册了一个Service Worker: client.js if ('serviceWorker' in navigator) { navigator.serviceWorker .register(rootPath+'/js/service-worker.js') .then(function() { console.log('Service Worker Registered'); }); } service-worker.js (基于Google PWA教程) var cacheName = 'myCacheVersion'; var filesToCache = [ '../', '../place/test', '../js/client.js', '../js/service-worker.js', "../css/style.css" ]; self.addEventListener('install', function(e) { console.log('[ServiceWorker] Install'); e.waitUntil( caches.open(cacheName).then(function(cache) […]

如何在Node.js中高效地进行网页抓取?

我试图从购物网站Express.com刮取一些数据。 以下是许多含有图片 , 价格 , 标题 , 颜色的产品中的一种 。 <div class="cat-thu-product cat-thu-product-all item-1"> <div class="cat-thu-p-cont reg-thumb" id="p-50715" style="position: relative;"><a href="/rocco-slim-fit-skinny-leg-corduroy-jean-50715-647/control/show/3/index.pro" onclick="var x=&quot;.tl(&quot;;s_objectID=&quot;http://www.express.com/rocco-slim-fit-skinny-leg-corduroy-jean-50715-647/control/show/3/index.pro_1&quot;;return this.s_oc?this.s_oc(e):true"><img class="cat-thu-p-ima widget-app-quickview" src="http://t.express.com/com/scene7/s7d5/=/is/image/expressfashion/25_323_2516_900/i81?$dcat191$" alt="ROCCO SLIM FIT SKINNY LEG CORDUROY JEAN"></a><a href="#jsLink"><img id="widget-quickview-but" class="widget-ie6png glo-but-css-off2" src="/assets/images/but/cat/but-cat-quickview.png" alt="Express View" style="position: absolute; left: 50px;"></a></div> <ul> <li class="cat-cat-more-colors"> <div class="productId-50715"> <img class="js-swatchLinkQuickview" title="INK BLUE" src="http://t.express.com/com/scene7/s7d5/=/is/image/expressfashion/25_323_2516_900_s/i81?$swatch$" width="16" […]

Node.js和线程

我正在开发一个完全无阻塞的node.js应用程序。 然而,有一些CPU密集型function: CryptoJS.AES解密/encryption uuid创作 从数据创build内容 现在我发现一个模块使用线程从CPU密集型任务中卸载事件循环: node-webworker-threads 我现在应该创build: 在应用程序引导:每个函数一个线程,所以AES.decrypt是一个线程,AES.encrypt等。 在应用程序启动:每个function的线程池? (多less个线程?每个CPU核心1个?) 执行时:每个函数进入一个新的线程,完成后摧毁它? 线程是我还没有完全理解的东西..

Websocket base64,二进制types

我很困惑。 我想了解Websockets是如何工作的,并在node.js和客户端build立一个服务器。 我无法理解的是,Websocket如何发送数据。 在从客户端(浏览器)发送之前是否将数据base64编码? 'binarytype'如何工作? 只为接收? 我也必须在服务器上实现这些吗? 我需要在服务器端的“二进制types”选项? 我什么时候需要blob和arraybuffer? 取决于小的和大的数据? 什么是如果得到video和audio文件? 我看了一下如何在网上发送图片,而且我常常find解决scheme,图片是base64编码,然后发送。 但是,如果浏览器中的Websocket API已经将二进制文件编码为base64,我不必这样做。 对不起,我很困惑,希望有人能帮助我

nightmarejs用querySelectorAll刮取多个元素

我试图从一个instagram的个人资料页面用nightmarejs(使用电子作为浏览器phantomjs衍生物)刮取一些信息。 目标是获取configuration文件上所有图像的ALT标签(例如,我只关注“显示更多”button之前的图像) var Nightmare = require('nightmare'); var nightmare = Nightmare({ show: true }); nightmare .goto('https://www.instagram.com/ackerfestival/') .evaluate(function () { let array = […document.querySelectorAll('._icyx7')]; return array.length; }) .end() .then(function (result) { console.log(result); }) .catch(function (error) { console.error('Search failed:', error); }); 这个例子工作,数组长度为12.电子浏览器打开和closures,所以一切都很好。 但是,如果我改变返回只是数组,电子浏览器从不closures,我没有得到一个console.log。 我究竟做错了什么? 我想从数组或对象的图像中获取所有信息。

Node.js:可用/创buildWeb代理

我正在尝试创build一个非常像Proxify的Web代理,而不需要允许用户浏览第三方网站,而不是使用iframe来实现最大的可用性(绕开Iframe问题)。 我将如何能够实现这一目标? 另外,我search了一下,发现一些Node.js Web代理似乎不再工作,因为它们已经过时了。 例子: 节点Web代理示例1 节点Web代理示例2 他们最近的Node.jsnetworking代理是否可用?