node中网络模块net
node的网络模块架构
node全面支持各种网络服务器和客户端,包括tcp, http/https, tcp, udp, dns, tls/ssl等.
node是怎样支持https,tls的?
主要实现以下几个步骤即可:
- openssl生成公钥私钥
- 服务器或客户端使用https替代http
- 服务器或客户端加载公钥私钥证书
实现一个简单的http服务器?
const net = require('net')
const response =
`HTTP/1.1 200 OK
Data: Tue, 30 Jun 2020 01:00:00 GMT
Content-Type: text/plain
Connection: Closed
Hello world
`
const server = net.createServer(socket => {
socket.end(response)
})
server.listen(80, ()=>{
})
child-process
为什么需要child-process?
node是异步非阻塞的,这对高并发非常有效.可是我们还有其它一些常用需求,比如和操作系统shell命令交互,调用可执行文件,创建子进程进行阻塞式访问或高CPU计算等,child-process就是为满足这些需求而生的.child-process顾名思义,就是把node阻塞的工作交给子进程去做.
exec,execFile,spawn和fork都是做什么用的?
- exec可以用操作系统原生的方式执行各种命令,如管道 cat ab.txt | grep hello;
- execFile是执行一个文件; spawn是流式和操作系统进行交互;
- fork是两个node程序(javascript)之间时行交互.
实现一个简单的命令行交互程序?
使用spawn:
var cp = require('child_process');
var child = cp.spawn('echo', ['你好', "钩子"]); // 执行命令
child.stdout.pipe(process.stdout); // child.stdout是输入流,process.stdout是输出流
// 这句的意思是将子进程的输出作为当前程序的输入流,然后重定向到当前程序的标准输出,即控制台
两个node程序之间怎样交互?
用fork,原理是子程序用process.on, process.send,父程序里用child.on,child.send进行交互.
1) fork-parent.js
var cp = require('child_process');
var child = cp.fork('./fork-child.js');
child.on('message', function(msg){
console.log('老爸从儿子接受到数据:', msg);
});
child.send('我是你爸爸,送关怀来了!');
2) fork-child.js
process.on('message', function(msg){
console.log("儿子从老爸接收到的数据:", msg);
process.send("我不要关怀,我要银民币!");
});
怎样让一个js文件变得像linux命令一样可执行?
- 在myCommand.js文件头部加入 #!/usr/bin/env node
- chmod命令把js文件改为可执行即可
- 进入文件目录,命令行输入myComand就是相当于node myComand.js了
child-process和process的stdin,stdout,stderror是一样的吗?
概念都是一样的,输入,输出,错误,都是流.区别是在父程序眼里,子程序的stdout是输入流,stdin是输出流.
本文来自博客园,作者:只做你的向日葵,转载请注明原文链接:https://www.cnblogs.com/likme/p/15918317.html