Node是一个面向网络而生的平台,传统的的Web语言都需要有对应的Web服务器支持,但是在Node中只需要几行代码就可以构建一个Web服务器,无需额外的容器支持,Node中提供了net,dgram,http,https模块用以支持TCP,UDP,HTTP,HTTPS,适用于服务端和客户端。
1. 构建TCP服务
TCP=>传输控制协议,在网络七层协议中属于传输层协议,如下图:
创建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
网络安全传输协议,公钥加密,私钥解密,建立安全连接之前需互换密匙。
在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之上。