欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Nodejs -- 网络编程

程序员文章站 2022-06-30 19:54:41
...

Node是一个面向网络而生的平台,传统的的Web语言都需要有对应的Web服务器支持,但是在Node中只需要几行代码就可以构建一个Web服务器,无需额外的容器支持,Node中提供了net,dgram,http,https模块用以支持TCP,UDP,HTTP,HTTPS,适用于服务端和客户端。

1. 构建TCP服务

TCP=>传输控制协议,在网络七层协议中属于传输层协议,如下图:

Nodejs -- 网络编程

创建TCP服务Demo(server && client)

// server
var net = require('net');
var server = net.createServer(function(socket){
    socket.on('data', function(data){
        socket.write('transfer');
    });
    socket.on('end', function(data){
        console.log('cut off');
    });
    socket.write('test');
});
server.listen('10496', function(){
    console.log('server bound');
});

// client
var net = require('net');
var client = net.connect({port: 10496}, function(){
    console.log('client connected');
    client.write('world \r\n');
});
client.on('data', function(data){
	console.log(data.toString());
	client.end();
});
client.on('end', function(){
    console.log('client disconnected');
});

           2. 构建HTTP服务

// server
var http = require('http');
http.createServer(function(req, res){
    res.writeHead(200, {'Content-Type': 'text\plain'});
    res.end('Hello World \n');
}).listen(10496, '127.0.0.1');

// client
var options = {    
    hostname: '127.0.0.1',
    port: 10496,
    path: '/',
    method: 'GET'
}
var req = http.request(options, function(res){
    console.log('status: ' + res.statusCode);
    console.log('headers:' + JSON.stringify(res.headers));
    res.setEncoding('utf-8');
    res.on('data', function(chunk){
        console.log(chunk);
    });
});
req.end();

           3. 构建WebSocket服务

var socket = new WebSocket('ws://127.0.0.1:10496/updates');
socket.onopen = function(){
    setInterval(function(){
        if(socket.bufferedAmount == 0){
            socket.sent(getUpdateData(), 50);
        }
    }
    socket.onmessasge = function(event){
        // TODO: event.data
    }
}

      4. TLS/SSL/HTTPS

      网络安全传输协议,公钥加密,私钥解密,建立安全连接之前需互换密匙。

Nodejs -- 网络编程

      在Node中底层采用openssl实现TLS/SSL的,要生成公钥和私钥也可以通过openssl完成。

      openssl genrsa -out server.key 1024             生成服务端私钥

      openssl genrsa -out client.key 1024              生成客户端私钥

      openssl rsa -in server.key -pubout -out server.pem     生成服务端公钥

      openssl rsa -in client.key -pubout -out client.pem        生成客户端公钥

      但尽管采用加密依然会被中间人窃听,为解决该问题引入数字证书CA。CA机构费时费力,所以可以自己生成自签名证书。

      openssl genrsa -out ca.key 1024

      openssl req -new -key ca.key -out ca.csr

      openssl x509 -req -in ca.csr -signkey ca.key -out ca.crt

      openssl req -new -key server.key -out server.csr

      openssl x509 -req -CA ca.crt -CAkey ca.key -CAcreateserial -in server.csr -out server.crt

      TLS/SSL 是作用于TCP传输层,而HTTPS作用于TLS/SSL之上。

 

相关标签: Node