Tag: 非阻塞

为什么NodeJS不使用Promise作为readFile API?

在书https://pragprog.com/book/tbajs/async-javascript中 ,我发现这个: Node的早期迭代在其非阻塞API中使用了Promises。 然而,2010年2月,Ryan Dahl做出了转向现在熟悉的callback(err,results …)格式的决定,理由是Promise是属于“用户区”的更高级别的构造。 这看起来很让人困惑,因为作为一个读取文件的API,这个 fs.readFile('/etc/passwd') .onSuccess(function(data){console.log(data)}) .onError(function(err){throw err}) 看起来比这更好: fs.readFile('/etc/passwd', function (err, data) { if (err) throw err; console.log(data); }); 有没有人有关于为什么“承诺是一个更高级别的构造”会停止在NodeJS API中使用的想法?

有多个并发请求的Node.js服务器,它是如何工作的?

我知道node.js是一个单线程,asynchronous,非阻塞I / O。 我读了很多关于这个。 例如,PHP每个请求使用一个线程,但节点只使用一个线程,就像这样。 假设有三个请求a,b,c同时到达node.js服务器。 其中三个请求需要大量的阻塞操作,例如他们都想要读取同一个大文件。 那么这些请求是如何排队的,按照什么样的顺序进行阻塞操作,以及以什么顺序发送响应呢? 当然使用多less个线程? 请告诉我从请求到响应三个请求的序列。

为什么Node.JS中的函数和callback是非阻塞的?

Node对新手的理解是,如果我重写同步或线内代码以利用函数/callback,我可以确保我的代码是非阻塞的。 我很好奇这是如何工作的事件堆栈方面。 从这里简单的例子: 不明白的callback – Stackoverflow是这将阻止: var post = db.query("select * from posts where id = 1"); doSomethingWithPost(post) doSomethingElse(); 虽然这不会: callback = function(post){ doSomethingWithPost(post) } db.query("select * from posts where id = 1",callback); doSomethingElse(); 好的,我明白我们应该使用callback。 但就事件堆栈而言,为什么这个工作? Javascript是单线程的..在第一个例子中,第一行使用了昂贵的阻塞I / O操作。 第二行不能执行,直到第一行完成。 这是因为第2行需要来自第1行的信息吗? 还是因为I / O事件只是从根本上阻止了操作,意味着他们抓住了控制权,并且在完成之前不会退还… 在第二个例子中,昂贵的I / O已经被移入了一个函数,现在我们有了一个callback函数。 当然,callback不能执行,直到I / O完成..这不会改变。 因此,在一到二之间执行所花费的时间的差异主要是如果第二个请求到达服务器将会发生什么。 如果第二个请求遇到示例一,它将不能够处理,直到请求1完成,因为阻塞操作..但在这个例子中,..将操作移动到函数自动产生subprocess或作为multithreading? 如果Javscript是单线程的,这将仍然会造成一个问题,除非有一些并行处理的方法..一个函数/callback只保证是非阻塞如果我们使用非阻塞技术,如subprocess等。 。

如果nodejs使用非阻塞IO,fs.readFileSync如何实现?

我在文件系统库中看到很多同步function。 如fs.readFileSync(filename, [options]) 。 如果节点具有asynchronous/非阻塞IO并且没有睡眠方法,那么这些函数是如何(以及为什么)实现的?我可以使用相同的机制来实现其他同步函数吗?

我是否需要Python中的node.js,就像使用PHP一样?

我一直在使用PHP一段时间。 而且我一直在考虑学习node.js以配合使用非阻塞的想法来创build在线游戏或应用程序。 有两个一起使用这两个相当多的信息。 使用节点作为游戏后端的一部分可以真正加快游戏的某些方面,特别是如果游戏允许用户实时地相互对战。 那么最近我也一直在研究python(是的,我有很多时间在我手上)。 有很多关于它的function,我真的很喜欢。 但是为了使用node.js来做后台工作,就像我正在考虑用php一样,我根本找不到很多信息。 我也注意到python确实有一些线程特性。 由于我对python的世界还很陌生,我甚至需要python中的node.js吗? python可以处理node.js可以使用的这些特性吗? 或者还是会有利用节点,或者我真的需要它。 作为一个侧面说明,因为我开始查找Python,我也发现扭曲,这似乎是另一个框架像节点。 但是,扭曲是用python编写的。 所以在上述任何一种情况下,扭曲会更好(除了扭曲看起来更长,比节点更稳定的事实)。 我的意思是,一般来说,它是值得使用的,无论是节点还是扭曲。 如果是这样的话,那么一个比Python更好。 对不起,这个大问题,但我只是如此不确定,在这方面n00b。 谢谢。 因此,在阅读有用的答案后,我看到以下选项:1. PHP + JS 2. Python + Twisted 3. Python +睡衣4. Python + node.js 5. Node.js 6. Twisted 我已经知道PHP,并且对它感到满意,现在正在学习JS。 这对我来说是一条可能的路线。 但是我也从PHP到Python,因为我喜欢的语言的一般特征。 我认为这个select可能比#3更合理,使用扭曲来处理networking端口以允许玩家与对方一起玩。 这只是让你不必学习JS。 对我来说,这似乎不是什么大不了的事情。 我已经开始学习了,不难学。 但是就像在一个问题中提到的那样,把事情混在一起, 和{}可能会有一些问题。 像#2,但与node.js. 大多数情况下,我会看到添加节点来处理networking方面,让玩家能够在现场/实时游戏中玩。 而大部分的代码将在Python中。 唯一的节点,js是一个考虑,以及它是单一语言的路线。 但它没有学习和使用Python的同样好处(它是一种通用的脚本语言,我可以使用,也可以不使用网页devise,这是我想学习和使用它的一个重要原因)。 答案作为#5,但我没有考虑一个唯一的路线,直到阅读评论。 虽然看起来似乎有道理,但它并不涉及我想学习的两种语言之一。 Python和节点。 以上似乎是我可以走的主要路线。 现在我还不确定要走哪条路。 […]

Node.js – 单线程,非阻塞?

我正在学习Node.js,我已经读了Node.js是单线程和非阻塞的。 我有一个良好的JavaScript背景,我确实了解callback,但是我不明白的是,Node.js如何可以单线程运行并在后台运行代码。 这不矛盾吗? 因为如果Node.js是单线程的,那么当时只能执行一个任务。 所以如果它在后台运行某些东西,它必须停止当前的任务来处理背景中的东西,对吧? 这实际上是如何工作的?

了解NodeJS和非阻塞IO

所以,我最近注入了在编程世界中快速传播的Node病毒。 我非常喜欢它的“非阻塞IO”方法,并且自己也尝试了几个程序。 但是,我目前还不了解某些概念。 我需要非专业人士的答案(来自Java背景的人) 1.multithreading与非阻塞IO。 让我们考虑一个实际的情况。 说,我们有一个网站,用户可以注册。 下面是代码。 .. .. // Read HTTP Parameters // Do some Database work // Do some file work // Return a confirmation message .. .. 在传统的编程语言中,上述过程是按顺序进行的。 而且,如果有多个注册请求,Web服务器创build一个新的线程,其余的是历史。 当然,程序员可以创build自己的线程同时在第2行和第3行上工作。 在Node中,据我所知,第二行和第三行将被并行运行,而程序的其余部分被执行,解释器每隔'x'ms轮询第二行和第三行。 现在,我的问题是,如果Node是单线程语言,那么在程序的其余部分执行时,第2行和第3行的工作是什么? 2.可扩展性 我最近读到LinkedIn已经将Node作为其移动应用程序的后端,并已经看到了巨大的改进。 任何人都可以解释它是如何做出这样的区别? 3.适应其他编程语言 如果人们声称Node在性能方面有很大的不同,为什么没有其他编程语言适应这种非阻塞IO范例呢? 我确定我错过了一些东西。 只有你能解释我,并指导我的一些链接,将是有益的。 谢谢。

除了可伸缩性之外,使用node.js有哪些架构原因?

我所读到的关于为什么要使用node.js的最常见的主题是高可扩展性,因为它是平坦的,非阻塞的I / O模型。 我试图了解其他不可扩展性的用例(除了被用作通用的服务器端JavaScript引擎)。 如果可扩展性不是我的问题,node.js是否还有其他用例? 如果对#1是,他们是什么? node.js用法是否适用于任何特定types的应用程序体系结构? 例如类似于一些键/值(nosql – 呃我讨厌这个词)数据库是有用的除了可伸缩性的原因。

Node.js + Socket.io + MongoDB webapps如何真正asynchronous?

我有一个很好的老式LAMPnetworking应用程序。 一个星期前,我需要添加一个推送通知机制。 因此,我所做的是在服务器上添加node.js + socket.io,并每隔10秒使用node.js轮询MySQL数据库以检查是否有新项目:如果是,我将它们发送到客户端s)与socket.io。 我对结果非常满意,即使这不是一个适当的实时通知(因为有10秒的延迟)。 现在,我即将build立一个新的Web应用程序,它也需要推送通知。 我想知道是否要采用与第一个(我认为更稳定和成熟)相同的方法,或者完全不使用PHP和Apache来完全使用Node.js。 至于数据库,我已经决定去MongoDB了。 最后,我的问题是:如果我去Node.js + Socket.io + MongoDB,我会得到一个真正 接近实时的 Web应用程序? 我的意思是,只要一条新logging被插入到MongoDB中,会不会有某种事件触发我可以通过node.js捕获,做一些检查,如果相关的话,把通知发送给客户端? 或者,无论如何,有一些在数据库服务器端和滞后轮询,如我的第一个LAMPnetworking应用程序? 一个相关的问题:你可以在MySQL上build立一个实时的Web应用程序,而不用像我的第一个应用程序那样进行轮询。 还是你需要MongoDB(或Redis)? 我希望这个问题不是太傻 – 对不起,我刚刚开始与Node.js和合作。 谢谢。

Ruby EventMachine,Python Twisted或JavaScript Node.js的重点/目的是什么?

我不明白这些框架解决了什么问题。 它们是否替代了像Apache HTTPD,Tomcat,Mongrel等HTTP服务器? 或者他们更多? 为什么我可以使用它们…一些真实世界的例子? 我已经看到了无数的聊天室和广播服务的例子,但是看不出有什么不同,例如,build立一个Java程序来打开套接字并为每个请求分派一个线程。 我想我理解非阻塞I / O,但我不明白这是multithreading的Web服务器。 对于Node.js,我读到它只有一个线程,而且这可能比multithreading更有效率,但是这些框架和传统的Web服务器之间的唯一区别?