在节点的幕后,http
模块的createServer
方法(及其回调函数)如何与事件循环交互?是否有可能在我自己的userland中构建类似于createServer
的功能,还是需要更改节点的底层系统代码?节点JS,createServer和事件循环
也就是说,我的节点的事件循环的一般理解是
- 事件循环蜱
- 节点查找任何回调运行
- 节点运行的回调
- 事件循环蜱再次,过程重复无穷无尽
我还有点模糊的是如何适应createServer
到事件循环。如果我做这样的事情
var http = require('http');
// create an http server and handle with a simple hello world message
var server = http.createServer(function (request, response) {
//...
});
我告诉节点每当一个HTTP请求进入运行我的回调,这似乎并没有与事件循环模式,我明白兼容。好像有一些非用户区和非事件循环正在侦听HTTP请求,然后运行我的回调(如果有人来的话)。
换句话说 - 如果我考虑实现我自己的版本createServer
,我不能想办法做到这一点,因为我计划的任何回调将运行一次。 createServer
只是使用setTimeout
或setInterval
来不断重新检查传入的HTTP请求?或者是有更低的水平,更有效的继续。我知道我不需要完全理解这一点来编写高效的节点代码,但我很好奇底层系统是如何实现的。
(我试过在node source下沿,但因为我不熟悉的节点模块系统,或传统的假设W/R/T编码模式深藏在系统代码中会很慢)
节点具有较低级别的网络支持http://nodejs.org/api/net.html,所以如果这就是你的意思,你应该可以创建自己的HTTP实现。 Node的事件系统可以通过实现一个* EventEmitter *来构建到你的类中。 http://nodejs.org/api/events.html –
...最终如果你的问题是如何实现底层系统,那么我不知道任何比阅读源代码更好的方法。 –
@CrazyTrain非常真实,但要真正学习代码案例可能需要数周,而不是几个月。有时候有人指着你正确的方向可以为你节省大量的时间。 –