nodejs篇 内置模块net

前言

上一篇介绍了node.js的http模块,展示了如何通过node.js建立一个简单的服务器,实际上http是在net模块基础上封装而来,底层使用的还是net模块,尤其是通信中使用的TCP/IP协议和socket。

nodejs commonjs介绍
nodejs fs模块介绍
nodejs path模块介绍
nodejs events模块介绍
nodejs http模块介绍

net既可以创建服务器,还可以模拟客户端

就好像http模块里,既可以http.createServer() 又可以请求 http.request()

服务器端

var net = require("net");

const PORT = 3000;
const HOST = "127.0.0.1";

const netServer = net.createServer(function (socket) {
    
    
  // 当服务器端收到客户端发的数据时触发
  socket.on("data", function (data) {
    
    
    console.log(`服务器收到来自客户端的数据${
      
      data}`);
    // ....处理完数据后,需要给客户端返回些什么
    socket.write("数据收到,已经处理");
  });

  socket.on("close", function () {
    
    
    console.log("服务端:客户端已经断开连接");
  });
});

netServer.listen(PORT, HOST, function () {
    
    
  console.log("服务器启动,开始监听来自客户端的请求");
});

客户端

var net = require("net");

const PORT = 3000;
const HOST = "127.0.0.1";

// 客户端开始连接服务器,如果服务器未开或者不存在会报错
const socket = net.createConnection(PORT, HOST, function(){
    
    
    console.log('客户端连接服务器')
});

// 客户端开始与服务端建立连接并成功时触发
socket.on('connect',function(){
    
    
    console.log('建立连接成功')
})

//客户端收到来自服务器的数据时触发
socket.on('data',function(data){
    
    
    console.log(`客户端收到来自服务端的:${
      
      data}`)
})

// 客户端主动断开与服务器端的连接时触发 socket.end()
socket.on('close',function(data){
    
    
    console.log('客户端:我要断开连接')
})

// 客户端向着服务端发送信息
socket.write('客户端:hello,服务端')

// 客户端向服务端发信息,并结束连接
socket.end('客户端:服务器再见')

服务端

服务器启动,开始监听来自客户端的请求
服务器收到来自客户端的数据客户端:hello,服务端 客户端:服务器再见
务务端:客户端已经断开连接

客户端

客户端连接服务器
建立连接成功
客户端收到来自服务端的:数据收到,已经处理
客户端:我要断开连接

server常用的事件 listening/connection/close/error

listening:调用 server.listen(),正式开始监听请求的时候触发。
connection:当有新的请求进来时触发,参数为请求相关的 socket。
close:服务端关闭的时候触发。
error:服务出错的时候触发,比如监听了已经被占用的端口。

var net = require("net");

const PORT = 3000;
const HOST = "127.0.0.1";

const netServer = net.createServer(function (socket) {
    
    
...
});
netServer.on('listening', ...)
netServer.on('connection', ...)
netServer.on('close', ...)
netServer.on('error', ...)

socket常用事件 close/connect/data/end/error

// 客户端开始连接服务器,如果服务器未开或者不存在会报错
const socket = net.createConnection(PORT, HOST, function(){
    
    
    console.log('客户端连接服务器')
});

// 客户端开始与服务端建立连接并成功时触发
socket.on('connect',function(){
    
    
    console.log('建立连接成功')
})

//客户端收到来自服务器的数据时触发
socket.on('data',function(data){
    
    
    console.log(`客户端收到来自服务端的:${
      
      data}`)
})

// socket报错或者结束时触发
socket.on('close',function(data){
    
    
    console.log('客户端:我要断开连接')
})

// 当 socket 的另一端发送一个 FIN 包的时候触发,从而结束 socket 的可读端。
socket.on('end',function(){
    
    
    console.log('服务器端断开了连接')
})

// 当错误发生时触发。'close' 事件也会紧接着该事件被触发。
socket.on('error',function(){
    
    
    console.log('出错了')
})

socket属性和api

连接相关

  1. socket.connect():有3种不同的参数,用于不同的场景;

  2. socket.setTimeout():用来进行连接超时设置。

  3. socket.setKeepAlive():用来设置长连接。

  4. socket.destroy()、socket.destroyed:当错误发生时,用来销毁socket,确保这个socket上不会再有其他的IO操作。

数据读、写相关

  1. socket.write(data[, encoding][, callback]) 在 socket 上发送数据。第二个参数制定了字符串的编码 - 默认是 UTF8 编码。
  2. socket.end([data][, encoding]) 半关闭 socket。例如发送一个 FIN 包。服务端仍可以发送数据。
  3. socket.pause() 暂停读写数据。也就是说,[‘data’][] 将不会再被触发。可以用于上传节流。
  4. socket.resume() 在调用 [socket.pause()][] 之后恢复读取数据。
  5. socket.setEncoding() 设置作为可读流([Readable Stream][])的编码。在 [stream.setEncoding()][] 查看更多详情。

数据属性相关

  1. socket.bufferSize 此属性显示当前即将被写入的缓冲的字符数,如果数值过大,可能会造成堵塞,对处理大量或持续增长的 bufferSize 有经验的用户应该注意使用 [socket.pause()][] and [socket.resume()][] 对他们程序中的数据流进行节流。
  2. socket.bytesRead 接收的字节数量。
  3. socket.bytesWritten 发送的字节数量。

地址相关

  1. socket.address()

  2. socket.remoteAddress、socket.remoteFamily、socket.remotePort

  3. socket.localAddress/socket.localPort

nodejs其它内容介绍

nodejs commonjs介绍
nodejs fs模块介绍
nodejs path模块介绍
nodejs events模块介绍
nodejs http模块介绍

猜你喜欢

转载自blog.csdn.net/glorydx/article/details/128724250