返回

Node.js HTTP Server端原生模拟

前端

从零开始,写一个Node.js HTTP服务端TCP模拟

HTTP请求和响应对象

在Node.js中,HTTP请求和响应都是流。请求对象是一个可读流,而响应对象是一个可写流。这意味着我们可以使用流的方法来操作它们。

res.end()方法

res.end()方法用于结束响应并将其发送给客户端。该方法可以接受两个参数:数据和编码。如果未指定数据,则res.end()将发送一个空响应。如果未指定编码,则res.end()将使用默认编码UTF-8。

Node.js 服务端使用TCP Server监听HTTP请求

const net = require('net');

// 创建一个TCP服务器
const server = net.createServer((socket) => {
  // 当有客户端连接时触发该事件
  socket.on('data', (data) => {
    // 解析HTTP请求
    const request = http.parse(data.toString());

    // 构造HTTP响应
    const response = http.createServerResponse(request);

    // 发送HTTP响应
    socket.write(response.toString());

    // 结束TCP连接
    socket.end();
  });
});

// 监听80端口
server.listen(80);

模拟HTTP服务端响应HTTP GET请求

const net = require('net');

// 创建一个TCP服务器
const server = net.createServer((socket) => {
  // 当有客户端连接时触发该事件
  socket.on('data', (data) => {
    // 解析HTTP请求
    const request = http.parse(data.toString());

    // 构造HTTP响应
    const response = http.createServerResponse(request);

    // 发送HTTP响应
    socket.write(response.toString());

    // 结束TCP连接
    socket.end();
  });
});

// 监听80端口
server.listen(80);

// 模拟一个HTTP GET请求
const request = 'GET / HTTP/1.1\r\nHost: localhost:80\r\n\r\n';

// 将HTTP请求发送给服务器
const socket = net.connect(80, 'localhost');
socket.write(request);

// 监听服务器响应
socket.on('data', (data) => {
  // 解析HTTP响应
  const response = http.parse(data.toString());

  // 输出HTTP响应
  console.log(response);
});

本文介绍了如何使用Node.js模拟HTTP服务端TCP Socket来处理HTTP请求和响应。我们学习了请求和响应对象的概念,以及res.end()方法的使用。此外,我们还提供了如何在服务端使用TCP Server监听HTTP请求并做出响应的代码示例。