返回
Node.js HTTP Server端原生模拟
前端
2023-11-02 02:24:49
从零开始,写一个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请求并做出响应的代码示例。