在之前的篇章中我们已经讲过七层参考模型了,今天我们从传输层
实现应用层
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
可以监听很多事件
close
一旦套接字完全关闭就触发connect
当成功建立套接字连接时触发data
接收到数据时触发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看浏览器是否能够识别
也是成功的返回了