Node学习记录:网络编程

本文介绍Node.js中的网络编程,包括TCP、UDP、HTTP和HTTPS的基本使用方法。通过具体示例展示了如何创建服务器和客户端,以及如何处理不同类型的网络请求。

笔记 | Linux网络基础

Node提供了net、dgram、http、https四个模块,分别处理TCP、UDP、HTTP、HTTPS.适用于服务器和客户端。

TCP

httpcode

图片描述

code说明
200请求被成功处理
301/302永久性重定向/临时性重定向
403没有权限访问
404表示没有对应资源
401(未授权)请求要求身份验证。对于登录后请求的网页,服务器可能返回此响应(如知乎这种需要登录才能查看的)
500服务器错误
503服务器停机或正在维护

传输控制协议
在OSI模型(物理层、数据链结层、网络层、传输层、会话层、表示层、应用层)中属于传输层协议
TCP是面向连接的协议,在传输之前需要三次握手形成会话。
图片描述
图片描述

##

图片描述

戳这里看详解

创建TCP服务器

var net = require('net');

var server = net.createServer( function (socket) {
  

  //新的连接
  socket.on('data', function (data) {
    socket.write("您好")
  });
  
  socket.on('end', function () {
    console.log('连接断开')
  });

  socket.write("实例: \n");
});

server.listen(8124, function () {
  console.log('server bound');
});

通过net模块自行构造客户端进行会话,测试上面构建的TCP服务的代码如下:

var net = require('net');
var client = net.connect({port:8124}, function () {
  //'connect' listener
  console.log('client connected');
  client.write('world !\r\n');
});

client.on('data', function (data) {
console.log(data.String());
client.end();
});

client.on('end', function () {
console.log('client disconnected');
});

以上客户端代码存为client.js并执行

$ node client.js

client connected

实例:

您好
client disconnected

UDP

用户数据包协议,与TCP一样同属于网络传输层。UDP不是面向连接的。DNS服务基于它实现。

创建UDP服务端

var dgram = require ('dgram');
var server = dgram.createSocket("udp4");

server.on ("message", function (msg, rinfo) {
  console.log("server got:" + msg + "from" + rinfo.address + ":" + rinfo.port);
});

server.on("listening", function () {
  var address =server.address();
  console.log("server listening" + address.address + ":" + address.port);
});

server.bind(41234);

创建UDP客户端

var dgram = require('dgram');
var message = new Buffer ("Node.js")
var client = dgram.createSocket("udp4");

client.send(message, 0, message.length, 41234, "localhost", function (err, bytes) {
  client.close();
});

保存为client.js并执行,服务器端的命令行将会如下输出

$ node client.js
server listening 0.0.0.0:41234
server got: Node.js from 127.0.0.1:58682

与TCP套接字的Write()相比,send()方法的参数列表相对复杂,但是它更灵活的地方在于可以随意发送数据到网络中的服务器端,而TCP如果要发送数据给另一个服务器端,则需要重新通过套接字构造新的连接。

HTTP

TCP与UDP都是属于网络传输层协议,如果要构建高效的网络应用,就应该从传输层进行着手。
Node提供了基本的http和https模块用于HTTP和HTTPS的封装,对于其他应用层协议(SMTP、IMAP等等)也能从社区找到实现。
实现HTTP服务器:

var http = require('http');
http.createServer( function (req, res) {
  res.wirteHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
}).listen(1337,'127.0.0.1');
console.log("Server running at http://127.0.0.1:1337/ ")

尽管这个小服务器只能回复Hello World,但是它能维持并发量和QPS都是可观的。

HTTP报文

HTTP全称超文本传输协议,它构建在TCP之上属于应用层协议,HTTP的两端是服务器和浏览器(B/S模式)

http模块

关于http模块的一些实例 可以戳这里

Serving HTML Page

var http = require('http');
var fs = require('fs');

var server = http.createServer(function(req, res) {
    console.log('request was made: ' + req.url);
    res.writeHead(200,{'Content-Type': 'text/html'});
    var myReadStream = fs.createReadStream(__dirname + '/index.html','utf8');
    myReadStream.pipe(res);
});

server.listen(3000,'127.0.0.1');
console.log('now listening to port 3000');

图片描述

Serving JSON data

ar http = require('http');
var fs = require('fs');

var server = http.createServer(function(req, res) {
    console.log('request was made: ' + req.url);
    res.writeHead(200,{'Content-Type': 'application/json'});
    var myObj = {
        name: 'AlexZ33',
        job: "Engineer",
        age: '26'
    }
    res.end(JSON.stringify(myObj)); //end()括号内是string 或者buffer,所以我们不能直接用myObj这个对象,要转换
});

server.listen(3000,'127.0.0.1');
console.log('now listening to port 3000');

图片描述

HTTPS 和 HTTP2

图片描述

图片描述

图片描述
HTTP/2

图片描述

参考

Node.js知识点详解(二)HTTP模块与事件模块
Anatomy of an HTTP Transaction
《nodejs 深入浅出》
《图解HTTP》
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值