我在网络编程方面不是很有经验,我还没有在Node.js中编写任何东西,只是对事件驱动的方法感到好奇.看起来确实不错.
本文解释了当我们使用基于线程的方法处理请求时可能发生的一些不好的事情,并且应该选择事件驱动的方法.在基于线程的情况下,收银员/线程一直困扰着我们,直到我们的食物/资源准备就绪.在事件驱动下,收银员将我们送到请求队列之外的某个地方,这样我们就不会在等待食物时阻止其他请求.要扩展基于阻塞线程,需要增加线程数.对我而言,这似乎是一个不正确使用线程/线程池的错误借口.
难道不能使用IHttpAsyncHandler正确处理?ASP.Net接收请求,使用ThreadPool并运行处理程序(BeginProcessRequest),然后在其中我们使用回调加载文件/数据库.那个线程应该可以自由处理其他请求.文件读取完成后,再次调用ThreadPool并执行剩余的响应.对我来说没有那么不同,那为什么不那么可扩展呢?
我所知道的基于线程的缺点之一是,使用线程需要更多内存.但只有这些,您才能享受多核的好处.我怀疑Node.js根本没有使用任何线程/核心.
因此,基于事件驱动vs基于线程(不要带"因为它是Javascript和每个浏览器..."的论点),有人可以指出我使用Node.js而不是使用Node.js的实际好处是什么现有技术?
这是一个很长的问题.谢谢 :)
我刚刚开始玩事件驱动的架构,来自一个非常标准的面向对象的思维模式.
我注意到的第一件事是,理解和跟踪程序的难度似乎随着程序的大小呈指数级增长.虽然小型宠物项目很容易遵循,但感觉就像代码会迅速转向意大利面.
我理解我是这种发展思维的新手,并不是所有我的面向对象的担忧都会延续下去.有没有关于编写可维护,可理解的事件驱动代码的资源?使用node.js或Twisted或Event Machine的人对此有何看法?
architecture documentation maintainability event-driven node.js
我在带有按钮的HTML页面中有一些JavaScript代码.我有一个名为'click()'的函数来处理按钮的onClick事件.该按钮的代码如下:
<input type="button" onClick="click()">button text</input>
Run Code Online (Sandbox Code Playgroud)
问题是单击按钮时,不会调用该函数.我在这做错了什么?
谢谢
事件驱动和异步通常用作同义词.这两者有什么不同吗?
另外,epoll
和之间有什么区别aio
?它们如何结合在一起?
最后,我多次读过Linux中的AIO被严重破坏.究竟是怎么破碎的?
谢谢.
我正在学习JavaScript中的反应式编程和功能反应式编程.我很迷茫.
维基百科说,有各种方法来编写反应性代码,如命令式,OORP和功能性.我想知道事件驱动是否只是编写反应代码的另一种方式?
响应式编程如何与Promises相关?我认为承诺是事件驱动和回调地狱的替代品.
我将开发一个协作网站,其中一个功能将是实时更改的协作编辑.即,当两个或更多用户正在编辑同一个文档时,他们可以在发生时立即看到彼此的变化.我对Ruby on Rails有一些经验,所以我在考虑使用EventMachine,但是围绕Node.js的所有这些炒作,我知道考虑使用它.那么,使用Node.js而不是EventMachine的主要好处是什么?
tl; dr EventMachine和Node.js之间的主要区别是什么(除了语言)?
"SEDA为的缩写阶段式服务器模型,并分解一个复杂的,事件驱动的应用程序为一组的阶段由连接队列 ".
我知道这是一个架构,并且SEDA有很多实现(参见维基百科文章).什么是"舞台"?有人可以提供有关分阶段事件驱动架构的全面高级摘要,以及它与传统(未分级?)事件驱动架构的区别吗?
是否有一种干净的方法以非阻塞的方式异步解析Java中的DNS查询(通过主机名获取IP)(即状态机,而不是1个查询= 1个线程 - 我想同时运行数万个查询,但是没有运行成千上万的线程)?
到目前为止我发现了什么:
InetAddress.getByName()
实现是阻塞的,看起来标准Java库缺少任何非阻塞实现.Future
范式使用,以及非常有限的仅限队列的实现.Fun
类我错过了任何其他想法/实施?
澄清.我有一个相当大(每天几TB)的日志量.每个日志行都有一个主机名,可以来自互联网上的任何地方,我需要一个IP地址作为我的进一步统计计算的主机名.行的顺序并不重要,所以,基本上,我的想法是开始2个线程:首先迭代线:
第二个线程将:
epoll
/ kqueue
like技术)Perl中的一个简单的模型实现AnyEvent
向我展示了我的想法通常是正确的,我可以通过这种方式轻松实现每秒15-20K查询的速度(天真的阻塞实现每秒2-3次查询 - 只是为了比较 - 所以这就像4个数量级的差异).现在我需要在Java中实现相同的 - 我想跳过我自己的DNS实现;)
寻找书籍,博客,网站或视频.
目前,我从Udi Dahan和Greg Young的博客中获得了很多价值,但我想知道是否还有其他专家值得一试?
Node.js是一个事件驱动的I/O,它是一个单线程服务器,它作用于回调,从不在主线程上阻塞.
基于线程的模型将任务分配给线程,如果没有空闲线程,则阻止新任务.
我想知道事件驱动和基于线程的服务器系统之间有什么区别(优点/缺点).
event-driven ×10
node.js ×4
architecture ×3
asynchronous ×2
eda ×2
javascript ×2
aio ×1
asp.net ×1
bacon.js ×1
commonjs ×1
dns ×1
epoll ×1
eventmachine ×1
frp ×1
html ×1
java ×1
linux ×1
messaging ×1
nonblocking ×1
soa ×1
stage ×1
threadpool ×1