0
点赞
收藏
分享

微信扫一扫

TCP实现HTTP服务

TCP实现HTTP服务_套接字

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

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

TCP实现HTTP服务_套接字_02

创建一个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 启动之后我们使用浏览器访问一下

TCP实现HTTP服务_后端_03

可以看到浏览器发送了一个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看浏览器是否能够识别

TCP实现HTTP服务_Node.js_04

也是成功的返回了

举报

相关推荐

0 条评论