node全局变量 node定时器 系统自带的模块 http服务器
for(var k of Object.keys(global)){console.log(k)} global clearInterval clearTimeout setInterval setTimeout queueMicrotask clearImmediate setImmediate k undefined > var timer = setTimeout(function(a,b,c){console.log(a,b,c);},1000,1,'a') undefined > 1 a undefined
setImmediate
设定执行完回调,即这个调用可能是比较消耗时间的,暂时不阻止主进程的执行,等主进程执行完之后再执行。
var timer = setImmediate(function(a, b, c) {
console.log(a, b, c);
}, 1000, 1, 'a');
console.log("hello");
输出:
hello
1000 1 'a'
系统自带的模块
通过process.moduleLoadList
打印的NativeModule
可以查看到相关的模块信息。主要的系统模块包括:
[ 'assert', 'buffer', 'console', 'dns', 'domain', 'events', 'fs', 'module', 'net', 'os', 'path', 'querystring', 'readline', 'repl', 'stream', 'string_decoder', 'timers', 'tty', 'url', 'util', 'vm' ]
其中最能代表 node.js 的最初思想的是 net, 'events'这两个模块。
module 及其变量
在 node.js 里通常一个文件就可以是一个模块 并且每个模块都包含下面几个模块变量:
- __dirname 获取当前文件所在目录
- __filename 获取当前文件名
- exports 到 module.exports 的引用
- module 当前模块
- require() 模块加载的函数
1.用于创建 TCP/IPC 服务器 */
const net = require("net"); /* 自带模块,不需要下载依赖 */ /* net.Server 类 1.用于创建 TCP/IPC 服务器 */ const server = net.createServer((socket) => { }); /* 2.可能响应的事件: a. connection:外部 socket 接入事件 b. listening: 侦听事件 c. close: 关闭事件 d. error: 错误事件 */ server.on("connection", (socket) => { // 无id console.log("socket id = " + socket.id); console.log("一个新的socket链接"); /* 获取远程地址与端口 .remoteAddress .remotePort 取消 TCP 缓存数据(Nagle 算法) .setNoDelay 发送数据 .write */
}); /* listening 事件 比 listen 的回调优先级高。*/ server.on("listening", () => { console.log("监听服务"); console.log(arguments); }); /* error 事件 */ server.on('error', (err) => { // handle errors here throw err; }); /* close 事件 会在所有连接关闭后发出 */ server.on('close', (err) => { console.log("服务关闭"); }); server.listen(process.env.NODE_PORT || 8888);
http服务器
const http = require('http'); const server = http.createServer((req, res) => { res.end("Hello world!\n"); }); server.listen(4333);
访问测试
$> curl http://127.0.0.1:4333
Hello world!
最简单的 HTTP 服务器完成!
下面命令可以看到协议的一些交互信息:
curl -v http://127.0.0.1:4333
C:\Users\dell>curl http://127.0.0.1:4333 Hello world! C:\Users\dell>curl -v http://127.0.0.1:4333 * Rebuilt URL to: http://127.0.0.1:4333/ * Trying 127.0.0.1... * TCP_NODELAY set * Connected to 127.0.0.1 (127.0.0.1) port 4333 (#0) > GET / HTTP/1.1 > Host: 127.0.0.1:4333 > User-Agent: curl/7.55.1 > Accept: */* > < HTTP/1.1 200 OK < Date: Mon, 28 Dec 2020 07:40:32 GMT < Connection: keep-alive < Content-Length: 13 < Hello world! * Connection #0 to host 127.0.0.1 left intact C:\Users\dell>