网络编程&&WebSockets

8. 网络编程与 WebSockets

8.1 创建 TCP 服务器

Node.js 提供了 net 模块,可以用来创建 TCP 服务器和客户端。

  • 创建 TCP 服务器

    const net = require('net');
    
    const server = net.createServer((socket) => {
      console.log('Client connected');
      
      socket.on('data', (data) => {
        console.log('Received data:', data.toString());
        socket.write('Hello from server');
      });
    
      socket.on('end', () => {
        console.log('Client disconnected');
      });
    });
    
    server.listen(8080, () => {
      console.log('TCP server listening on port 8080');
    });
    
  • 创建 TCP 客户端

    const net = require('net');
    
    const client = net.createConnection({ port: 8080 }, () => {
      console.log('Connected to server');
      client.write('Hello from client');
    });
    
    client.on('data', (data) => {
      console.log('Received from server:', data.toString());
      client.end(); // 结束连接
    });
    
    client.on('end', () => {
      console.log('Disconnected from server');
    });
    
8.2 创建 HTTP 服务器与客户端

Node.js 的 http 模块可以用来创建 HTTP 服务器和客户端。

  • 创建 HTTP 服务器

    const http = require('http');
    
    const server = http.createServer((req, res) => {
      res.statusCode = 200;
      res.setHeader('Content-Type', 'text/plain');
      res.end('Hello, world!\n');
    });
    
    server.listen(3000, () => {
      console.log('HTTP server listening on port 3000');
    });
    
  • 创建 HTTP 客户端

    const http = require('http');
    
    const options = {
      hostname: 'localhost',
      port: 3000,
      path: '/',
      method: 'GET'
    };
    
    const req = http.request(options, (res) => {
      let data = '';
    
      res.on('data', (chunk) => {
        data += chunk;
      });
    
      res.on('end', () => {
        console.log('Response:', data);
      });
    });
    
    req.on('error', (err) => {
      console.error('Request error:', err);
    });
    
    req.end();
    
8.3 使用 WebSocket 实现实时通信

WebSocket 允许在客户端和服务器之间建立持久的双向通信连接。ws 模块是 Node.js 中处理 WebSocket 的常用库。

  • 安装 ws 模块

    npm install ws
    
  • 创建 WebSocket 服务器

    const WebSocket = require('ws');
    
    const wss = new WebSocket.Server({ port: 8080 });
    
    wss.on('connection', (ws) => {
      console.log('Client connected');
    
      ws.on('message', (message) => {
        console.log('Received message:', message);
        ws.send('Hello from server');
      });
    
      ws.on('close', () => {
        console.log('Client disconnected');
      });
    });
    
    console.log('WebSocket server listening on port 8080');
    
  • 创建 WebSocket 客户端

    const WebSocket = require('ws');
    
    const ws = new WebSocket('ws://localhost:8080');
    
    ws.on('open', () => {
      console.log('Connected to server');
      ws.send('Hello from client');
    });
    
    ws.on('message', (message) => {
      console.log('Received message:', message);
      ws.close(); // 结束连接
    });
    
    ws.on('close', () => {
      console.log('Disconnected from server');
    });
    
8.4 使用 HTTP/2 实现更高效的网络通信

HTTP/2 是 HTTP 的更新版本,具有更好的性能和效率。Node.js 支持 HTTP/2。

  • 创建 HTTP/2 服务器

    const http2 = require('http2');
    const fs = require('fs');
    const path = require('path');
    
    const server = http2.createSecureServer({
      key: fs.readFileSync(path.join(__dirname, 'server.key')),
      cert: fs.readFileSync(path.join(__dirname, 'server.crt'))
    });
    
    server.on('stream', (stream, headers) => {
      stream.respond({
        'content-type': 'text/plain',
        'status': 200
      });
      stream.end('Hello, HTTP/2 world!\n');
    });
    
    server.listen(8443, () => {
      console.log('HTTP/2 server listening on port 8443');
    });
    
  • 创建 HTTP/2 客户端

    const http2 = require('http2');
    
    const client = http2.connect('https://localhost:8443');
    
    const req = client.request({ ':path': '/' });
    
    req.on('response', (headers, flags) => {
      console.log('Response headers:', headers);
    });
    
    req.on('data', (chunk) => {
      console.log('Received data:', chunk.toString());
    });
    
    req.on('end', () => {
      client.close();
    });
    

总结

网络编程和 WebSockets 是构建网络应用程序和实现实时通信的关键技术。Node.js 提供了处理 TCP、HTTP 和 WebSocket 的强大功能,使得创建高效的网络服务和客户端变得更加容易。掌握这些技能将使你能够构建复杂的网络应用程序,并实现实时数据交换和通信。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

跳房子的前端

你的打赏能让我更有力地创造

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值