TCP实现HTTP服务

简介: TCP实现HTTP服务

在之前的篇章中我们已经讲过七层参考模型了,今天我们从传输层实现应用层http服务

使用nodejs原生net模块就可以打通TCP传输层并且提供一个端口号进行监听

创建一个TCP服务

import net from 'net'
const server = net.createServer((socket) => {
    socket.on('data', (data) => {
        console.log('data is', data.toString())
        socket.write('hello from server')
    })
})
server.listen(8080, () => {
    console.log('server is listening', server.address())
})

net.createServer创建 Unix 域套接字并且返回一个server对象接受一个回调函数

socket可以监听很多事件

  1. close 一旦套接字完全关闭就触发
  2. connect 当成功建立套接字连接时触发
  3. data 接收到数据时触发
  4. end 当套接字的另一端表示传输结束时触发,从而结束套接字的可读端

通过node index.js 启动之后我们使用浏览器访问一下

可以看到浏览器发送了一个http get 请求 我们可以通过关键字get 返回相关的内容例如html

import net from 'net'
let html = `
   <h1>BLG</h1>
`
let headers = [
    'HTTP/1.1 200 OK',
    'Content-Type: text/html',
    `Content-length:${html.length} `,
    `Date:${new Date()}`,
    'Connection: keep-alive',
    //'Transfer-Encoding: chunked',
    '\r\n',
    html
]
const server = net.createServer((socket) => {
    socket.on('data', (data) => {
        let msg = data.toString()
        if(/GET/.test(msg)){
            console.log(headers.join('\r\n'));
            socket.write(headers.join('\r\n'))
            socket.end()
        }
        // console.log('data is', data.toString())
        // socket.write('hello from server')
    })
})
server.listen(8080, () => {
    console.log('server is listening', server.address())
})

通过拦截get请求模拟请求头相关报文去返回一个html看浏览器是否能够识别

也是成功的返回了

目录
相关文章
|
6天前
|
Web App开发 监控 Java
|
6天前
|
消息中间件 网络协议 开发工具
MQ产品使用合集之rocketmq5.x只有tcp接入点吗,python sdk需要http接入点,请问怎么使用
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
23 2
|
6天前
|
网络协议 网络安全 程序员
socket,tcp,http三者之间的原理和区别
socket,tcp,http三者之间的原理和区别
socket,tcp,http三者之间的原理和区别
|
6天前
|
网络协议 应用服务中间件 nginx
nginx 302 301 设置 url 转跳 nginx 资源重定向 nginx tcp 和 http 转发
nginx 代理后端网站,和 网站资源目录重定向到其他连接地址
78 3
|
6天前
|
缓存 负载均衡 网络协议
【亮剑】一次完整的HTTP请求的重要性和详细过程
【4月更文挑战第30天】本文介绍了HTTP请求的重要性和详细过程。首先,DNS解析将域名转换为IP地址,通过递归和迭代查询找到目标服务器。接着,TCP三次握手建立连接。然后,客户端发送HTTP请求,服务器处理请求并返回响应。最后,理解这个过程有助于优化网站性能,如使用DNS缓存、HTTP/2、Keep-Alive、CDN和负载均衡等实践建议。
|
6天前
|
前端开发 API UED
AngularJS的$http服务:深入解析与进行HTTP请求的技术实践
【4月更文挑战第28天】AngularJS的$http服务是核心组件,用于发起HTTP请求与服务器通信。$http服务简化了通信过程,通过深入理解和实践,能构建高效、可靠的前端应用。
|
6天前
|
网络协议 Linux Windows
TCP/IP、Http、Socket之间的区别
TCP/IP、Http、Socket之间的区别
|
6天前
|
网络协议 Java API
深度剖析:Java网络编程中的TCP/IP与HTTP协议实践
【4月更文挑战第17天】Java网络编程重在TCP/IP和HTTP协议的应用。TCP提供可靠数据传输,通过Socket和ServerSocket实现;HTTP用于Web服务,常借助HttpURLConnection或Apache HttpClient。两者结合,构成网络服务基础。Java有多种高级API和框架(如Netty、Spring Boot)简化开发,助力高效、高并发的网络通信。
|
6天前
|
域名解析 网络协议 应用服务中间件
阿里云服务器配置免费https服务
阿里云服务器配置免费https服务
|
6天前
|
Windows
node搭建本地https和wss服务
node搭建本地https和wss服务
30 0