shr*_*ivb 3 javascript operating-system node.js
我正在尝试理解Node的内部工作,我正处于这样一个问题,即我无法将用js编写的Node如何挂钩/绑定到用C/C++编写的低级系统调用.
当我写这段代码时 -
var http = require('http');
var server = http.createServer(function(req,res) { res.end('Hacking Node'); });
server.listen(8081);
Run Code Online (Sandbox Code Playgroud)
server.listen如何监听只有操作系统可以访问的特定端口?其他各种功能也是如此.
到目前为止的旅程一直是这样.
我检查了net.js和os.js文件.但不能说得多.
我也挖到了用C编写的进程文件 - unix和windows版本.
最后,经过进一步调查后,点击了Node.js文件
// https://github.com/joyent/node/tree/6cbfcdad46d733bb04332063727e304e449dc86b/src/node.js
Run Code Online (Sandbox Code Playgroud)
有以下评论 -
// This file is invoked by node::Load in src/node.cc, and responsible for
// bootstrapping the node.js core. Special caution is given to the performance
// of the startup process, so many dependencies are invoked lazily.
Run Code Online (Sandbox Code Playgroud)
Node.cc在第2708行加载此Node.js文件.
// https://github.com/joyent/node/blob/6cbfcdad46d733bb04332063727e304e449dc86b/src/node.cc - line 2708
Run Code Online (Sandbox Code Playgroud)
就我而言.有人能指出我接下来会发生什么,并帮助我填写这个难题的部分.
我很惊讶没有人提到libuv.这是一个示意图.(这不是100%准确).
2 V8 compiler
/ \
/ \
1 Your code 3 node.js core system libraries(net,fs,events)
JavaScript
------------
V8 bindings(C++)
/ | \
/ | \
4 node.js platform code C/C++
events fs net
\ | /
\ | /
\|/
runs on
5 libuv C/C++
High Performance Event Loop
|
syscalls
|
6 Kernel
Run Code Online (Sandbox Code Playgroud)
记住你如何做.toString()并展示JS函数.这对V8绑定不起作用(显示[本机代码]).node.js platform(C++)函数具有V8绑定.因为节点提供了事件和异步执行,所以您在事件循环上执行的所有操作都在libuv上运行.显示libuv用法的旧博客.
libuv为您处理系统调用的调度,V8处理您的JS代码.节点将JS扩展到系统.
| 归档时间: |
|
| 查看次数: |
1265 次 |
| 最近记录: |