Node.js 中的 网络编程

简介: Node.js 中的 网络编程

网络编程

构建 TCP 服务

  • 创建 TCP 服务器端
var net = require('net');

var server = net.createServer(function (socket) {
  // 新的连接
  socket.on('data', function (data) {
    socket.write('Hello');
  });

  socket.on('end', function () {
    console.log('连接断开');
  });

  socket.write('Hello world \n');
});

server.listen(8124, function () {
  console.log('server bound');
});
  • net 模块构造客户端
var net = require('net');
var client = net.connect({ port: 8124 }, 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');
});
  • TCP 服务的事件

    • 服务器事件

      • listening
      • connection
      • close
      • error
    • 连接事件

      服务器可以同时与多个客户端保持连接,对于每个连接而言是典型的可读可写 Stream 对象
      • data
      • end
      • connect
      • drain
      • error
      • close
      • timeout
    // 由于 TCP 套接字是可读可写的 Stream 对象,可以利用 pipe() 方法巧妙实现管道操作
    // 实现 echo 服务器
    var net = require('net');
    
    var server = net.createServer(function (socket) {
      socket.write('Echo server \r\n');
      socket.pipe(socket);
    });
    
    server.listen(1337, '127.0.0.1');

构建 UDP 服务

  • 创建 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('Hello world');
var client = dgram.createSocket('udp4');
client.send(message, 0, message.length, 41234, 'localhost', function (err, bytes) {
  client.close();
});
  • UDP 套接字事件

    UDP 套接字相对 TCP 套接字使用起来更简单,它只是一个 EventEmitter 的实例,而非 Stream 的实例
    • message
    • listening
    • close
    • error

构建 HTTP 服务

var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, { 'Content-Type': 'text/plain' });
  res.end('Hello world\n');
}).listen(1337, '127.0.0.1');
console.log('Server running at http://localhost:1337');
  • HTTP 服务事件

    • connection
    • request
    • close
    • checkContinue
    • connect
    • upgrade
    • clientError
  • HTTP 客户端
var options = {
  hostname: '127.0.0.1',
  port: 1334,
  path: '/',
  method: 'GET'
};

var req = http.request(options, function (res) {
  console.log(`STATUS: ${res.statusCode}`);
  console.log(`HEADERS: ${JSON.stringify(res.headers)}`);
  res.setEncoding('utf8');
  res.on('data', function (chunk) {
    console.log(chunk);
  });
});
req.end();
  • HTTP 客户端事件

    • response
    • socket
    • connect
    • upgrade
    • continue

构建 WebSocket 服务

  • WebSocket 较 传统 HTTP 的好处

    • 客户端与服务端只建立一个 TCP 连接,可以使用更少的连接
    • WebSocket 服务器端可以推送数据到客户端,比 HTTP 请求响应模式更灵活、更高效
    • 有更轻量级的协议头,减少数据传送量
  • WebSocket 握手

    • 客户端建立连接时,通过 HTTP 发起请求报文
    • 一旦 WebSocket 握手成功,服务器端与客户端会呈现对等的效果,都能接收和发送消息
  • WebSocket 数据传输

    • 在握手完成后,当前连接不再进行 HTTP 交互,而是开始 WebSocket 的数据帧协议,实现客户端与服务器端的数据交换
相关文章
|
3月前
|
存储 安全 JavaScript
云计算浪潮中的网络安全之舵探索Node.js中的异步编程模式
【8月更文挑战第27天】在数字化时代的风帆下,云计算如同一片广阔的海洋,承载着企业与个人的数据梦想。然而,这片海洋并非总是风平浪静。随着网络攻击的波涛汹涌,如何确保航行的安全成为了每一个船员必须面对的挑战。本文将探索云计算环境下的网络安全策略,从云服务的本质出发,深入信息安全的核心,揭示如何在云海中找到安全的灯塔。
|
3月前
|
JavaScript 算法 前端开发
采招网JS逆向:基于AES解密网络数据
采招网JS逆向:基于AES解密网络数据
60 0
|
10天前
|
机器学习/深度学习 自然语言处理 前端开发
前端神经网络入门:Brain.js - 详细介绍和对比不同的实现 - CNN、RNN、DNN、FFNN -无需准备环境打开浏览器即可测试运行-支持WebGPU加速
本文介绍了如何使用 JavaScript 神经网络库 **Brain.js** 实现不同类型的神经网络,包括前馈神经网络(FFNN)、深度神经网络(DNN)和循环神经网络(RNN)。通过简单的示例和代码,帮助前端开发者快速入门并理解神经网络的基本概念。文章还对比了各类神经网络的特点和适用场景,并简要介绍了卷积神经网络(CNN)的替代方案。
|
17天前
|
数据采集 JavaScript 前端开发
JavaScript重定向对网络爬虫的影响及处理
JavaScript重定向对网络爬虫的影响及处理
|
1月前
|
存储 资源调度 JavaScript
vue.js【网络请求和状态管理】
vue.js【网络请求和状态管理】
|
3月前
|
数据采集 资源调度 JavaScript
Node.js 适合做高并发、I/O密集型项目、轻量级实时应用、前端构建工具、命令行工具以及网络爬虫和数据处理等项目
【8月更文挑战第4天】Node.js 适合做高并发、I/O密集型项目、轻量级实时应用、前端构建工具、命令行工具以及网络爬虫和数据处理等项目
58 5
|
3月前
|
JavaScript 前端开发 UED
探索JavaScript的历史:网络需求初现、语言创立与标准化的旅程
探索JavaScript的历史:网络需求初现、语言创立与标准化的旅程
|
3月前
|
JavaScript 前端开发 应用服务中间件
【qkl】JavaScript连接web3钱包,实现测试网络中的 Sepolia ETH余额查询、转账功能
【区块链】JavaScript连接web3钱包,实现测试网络中的 Sepolia ETH余额查询、转账功能
|
4月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的网络在线考试系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的网络在线考试系统附带文章源码部署视频讲解等
50 0
基于springboot+vue.js+uniapp的网络在线考试系统附带文章源码部署视频讲解等
|
4月前
|
测试技术 API Android开发
autox.js如何监听异常情况,比如网络中断、内存慢、应用死机或者页面无响应
autox.js如何监听异常情况,比如网络中断、内存慢、应用死机或者页面无响应