Nodejs系列-12-net模块

net 模块

net 模块提供了创建基于流的 TCP 或 IPC 服务器(net.createServer)和客户端(net.createConnection) 的异步网络 API

创建

服务端创建

new net.Server()
net.createServer([port[, host]])

server.listen(端口, [ip])
- 端口:
- ip:默认为0.0.0.0,表示所有

客户端 创建

new net.Socket()
    net.createConnection(port[, host][, connectListener])

例子

service 部分

  const net = require('net');
  const server = net.createServer( () => {
      // 这个函数其实就是connection事件绑定的函数
  });
  // 当有客户端连接的时候触发
  server.on('connection', socket => {
      // socket => 当前连接的 socket 对象
      console.log('连接建立了');
      socket.on('data', data => {
          socket.write('show me the money');
          console.log(data.toString(), socket.remoteAddress, socket.remotePort);
      });

  });
  // 0.0.0.0 : * 通配
  server.listen(8080, '0.0.0.0');

client 部分

  const net = require('net');

  /**
  * 创建客户端与udp不同
  *  net.Socket 类
  * 
  *  1. new net.Socket()
  *  2. net.createConnection()
  */

  // 要连接的目标主机的地址以及端口号
  const clientSocket = net.createConnection(8080, '127.0.0.1');
  clientSocket.write('hello');

  // 监听数据传输
  clientSocket.on('data', data => {
      console.log('服务器返回:', data.toString());
  });

  // 当数据包接收完成的时候触发
  clientSocket.on('end', () => {
      console.log( '数据包接收完成' );
  });

数据包

在数据传输过程中不仅仅只有主体数据(你要发送的主要内容),还包括了一些其他的数据信息,比如发送端的IP、端口等,以方便接受者对数据进行处理与回复。

如果发送的数据比较大的话,还会对发送的数据进行分包,每一个包中包含有一部分主体数据以及上面提到的额外信息,接收方在接收到数据以后会数据包进行整合等一系列操作。

这种传输规则就是数据传输协议中的规定,不同的协议对传输规则有不同的规定。

TCP与UDP

二者均为传输层协议,但又有一些不同之处。

TCP 协议

  • 可靠的、面向连接的协议、传输效率低
  • 效率要求相对低,但对准确性要求相对高的场景
  • 文件传输、接受邮件、远程登录

UDP 协议

  • 不可靠的、无连接的服务、传输效率高
  • 效率要求相对高,对准确性要求相对低的场景
  • 在线视频、网络语音电话

net 模块与 http 模块

NodeJs的net 模块用于创建基于流的 TCP 或 IPC 的服务器,而http模块主要是用来创建HTTP服务; TPC/IP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,日常中接触的更多。关于网络协议部分具体的可参考重学前端-浏览器部分-工作流程-请求/