在node.js中,似乎我遇到了相同的3个文件名来描述应用程序的主要入口点:
express-generator包时,app.js会创建一个文件作为生成的应用程序的主入口点.package.json文件时npm init,会提示输入主入口点文件.默认值为index.js.server.js也是主要的切入点.其他时候,似乎它们的使用方式存在细微差别.例如,该节点的应用程序的目录结构使用index.js和server.js在不同的上下文中:
app
|- modules
| |- moduleA
| | |- controllers
| | | |- controllerA.js
| | | +- controllerB.js
| | |- services
| | | +- someService.js
| | +- index.js <--------------
| +- index.js <-------------------
|- middleware.js
+- index.js <------------------------
config
+- index.js <------------------------
web
|- css
|- js
server.js <----------------------------
Run Code Online (Sandbox Code Playgroud)
这三个名字之间有什么不同?
我正在尝试使一些微服务更具弹性,并且重试某些类型的HTTP请求将有助于此.
重试超时会给客户带来非常缓慢的体验,因此我不打算在这种情况下重试.重试400s无济于事,因为错误的请求在几毫秒后仍然是一个错误的请求.
我想还有其他原因不能重试一些其他类型的错误,但是哪些错误以及为什么?
对于我在node.js中的应用程序,我必须根据一些数值(即数字等级)按降序对数组的元素进行排序.由于我的应用程序对性能至关重要,因此我决定构建我的数据结构,以便优化排序.我假设我的数组中每个元素包含的数据越少,排序就越快.为了测试我的假设,我在三个长度为10000的不同数组上运行了以下命令:
编辑:伙计们,我的原始测试似乎有些瑕疵.第一次测试所需的时间明显长于后续测试.因此,我修改了我的测试代码,以便在实际排序之前进行"缓冲"排序.此外,我将测试的顺序轮换为固定数量的试验,以减少测试本身排序可能导致的任何偏差.我相应地修改了结果.
完整来源:https://raw.githubusercontent.com/youngrrrr/js-array-sort-bench-test/master/arraySortTest.js
var buffer = [781197, ... ];
var sparseArray = [781197, ... ];
var sparseArray2 = [{'a' : 781197}, ...];
var denseArray = [{'a' : 781197, 'b': ['r', 'a', 'n', 'd', 'o', 'm'] }, ...];
/* buffer : for some reason, the first test always takes significantly longer than the others. I've added this to try to remove whatever bias there was before... */
console.time('buffer');
random.sort(compareSparse);
console.timeEnd('buffer');
console.log(buffer[0]); // prints "58"
/* sparseArray : …Run Code Online (Sandbox Code Playgroud) 请注意,我的问题的无关信息将被"引用"
像这样(随意跳过这些).
问题
我正在使用节点代表多个客户端发出有序HTTP请求.这样,最初使用几个不同的页面加载来获得所需结果的内容现在只通过我的服务器接受一个请求.我目前正在使用'async'模块进行流量控制,使用'request'模块进行HTTP请求.大约有5个回调,使用console.time,从开始到结束大约需要2秒钟(下面包含草图代码).
现在我对节点缺乏经验,但我知道节点的单线程特性.虽然我已多次读过该节点不是为CPU绑定任务而构建的,但直到现在我才真正理解这意味着什么.如果我对正在发生的事情有正确的理解,这意味着我目前拥有的(正在开发中)不会扩展到甚至超过10个客户端.
题
由于我不是节点的专家,我问这个问题(在标题中)得到确认,确保几个连续的HTTP请求确实是阻塞的.
结语
如果是这种情况,我希望我会问一个不同的SO问题(经过适当的研究)讨论各种可能的解决方案,我应该选择继续在节点中解决这个问题(这本身可能不适合我正在尝试的去做).
其他结束的想法
我真的很抱歉,如果这个问题不够详细,太苛刻,或者语言特别华丽(我试着简明扼要).
感谢所有能帮我解决问题的人!
我之前提到的代码:
var async = require('async');
var request = require('request');
...
async.waterfall([
function(cb) {
console.time('1');
request(someUrl1, function(err, res, body) {
// load and parse the given web page.
// make a callback with data parsed from the web page
});
},
function(someParameters, cb) {
console.timeEnd('1');
console.time('2');
request({url: someUrl2, method: 'POST', form: {/* data */}}, function(err, res, body) {
// more computation
// make a callback with a session …Run Code Online (Sandbox Code Playgroud) 这是我正在运行的系统的一些背景信息:
Ubuntu v 14.04
节点v4.4.0
节点request模块v2.69.0
所有这些都在位于纽约的中心的DigitalOcean Droplet /服务器上.
所以我运行以下js文件:
var request = require('request');
var url = 'http://www.supremenewyork.com/';
request(url, function(err, res, body) {
if (err) {
console.log(err);
return;
}
console.log('body:', body);
});
Run Code Online (Sandbox Code Playgroud)
在我的水滴上.大约70-80%的时间我尝试这个,现在每次尝试这个,我都会得到一个ETIMEDOUT错误:
{ [Error: connect ETIMEDOUT 52.6.25.180:80]
code: 'ETIMEDOUT',
errno: 'ETIMEDOUT',
syscall: 'connect',
address: '52.6.25.180',
port: 80 }
Run Code Online (Sandbox Code Playgroud)
值得注意的是,错误似乎出现在"波浪"中.也就是说,我会设法在一段时间内收到一些请求,然后是一系列ETIMEDOUT错误.错误的发生频率超过了我能够通过大约3:1的错误与成功之间的比率来获得我的请求.
在我自己的计算机上(运行OS X El Capitan的Mac),运行给定站点的js文件可以100%成功(即我之前从未遇到过这个问题)...所以我不确定为什么会出现这个问题包含在我的水滴中.
任何指针将不胜感激.
为什么我不能ping herokuapp < - 开始更好地了解这里发生的事情......
在节点js上出现http GET请求的问题 < - …
hosting network-programming node.js digital-ocean node-request
我想知道如何在Bootstrap的Carousel示例中获得100%适合屏幕的旋转木马,而不是它现在显示的方式,这允许一些空白的圆形图像在加载时包含在主着陆页中.
页面源(相关位):
<!-- Carousel
================================================== -->
<div id="myCarousel" class="carousel slide" data-ride="carousel">
<!-- Indicators -->
<ol class="carousel-indicators">
<li data-target="#myCarousel" data-slide-to="0" class="active"></li>
<li data-target="#myCarousel" data-slide-to="1"></li>
<li data-target="#myCarousel" data-slide-to="2"></li>
</ol>
<div class="carousel-inner" role="listbox">
<div class="item active">
<img class="first-slide" src="data:image/gif;base64,R0lGODlhAQABAIAAAHd3dwAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==" alt="First slide">
<div class="container">
<div class="carousel-caption">
<h1>Example headline.</h1>
<p>Note: If you're viewing this page via a <code>file://</code> URL, the "next" and "previous" Glyphicon buttons on the left and right might not load/display properly due to web browser security rules.</p> …Run Code Online (Sandbox Code Playgroud) 在Javascript中,创建对象似乎有两种方法Range:
var range = document.createRange(): 调用createRange()一个Document对象。更多信息var range = new Range(): 使用Range()构造函数。更多信息样式 #1 的 MDN 注释:
创建 Range 后,您需要先设置其边界点,然后才能使用其大部分方法。
风格 #2 的 MDN 说:
Range() 构造函数返回一个新创建的 Range 对象,其起点和终点是全局 Document 对象。
但这并不能完全告诉我两者之间有什么区别。
然而,在撰写本文时,MDN 顶部有一条关于样式 #2 的注释,内容如下:
这是一项实验技术
而且,重要的是,目前 IE 似乎还不支持创建Range对象的 style #2 语法。
除此之外,两者之间在创建方式Range或创建对象的任何一种方式返回的内容方面是否存在任何(细微的)差异Range?
如果我误用了任何术语,请提前道歉——如果我误用了,请纠正我,因为我对这些概念还很陌生。
谢谢!
使用 NSubstitute,我如何匹配“任何”字典 - 只要它包含一组特定的键值对?
以下内容将匹配任何字典:
mockObject.Received().Method(Arg.Any<Dictionary<string, string>>());
但我希望能够匹配任何字典,只要它具有给定的键值对。例如,我想做类似的事情:
mockObject.Received().Method(Arg.Any<Dictionary<string, string>> { {"MyKey": "MyValue"} });
NSubstitute 中是否存在类似的东西?
node.js ×4
http ×2
javascript ×2
arrays ×1
asynchronous ×1
blocking ×1
c# ×1
carousel ×1
conventions ×1
css ×1
dictionary ×1
dom ×1
hosting ×1
html ×1
httpresponse ×1
hystrix ×1
node-request ×1
nsubstitute ×1
range ×1
sorting ×1
spring-retry ×1
testing ×1
unit-testing ×1