在之前的篇章中我们已经讲过七层参考模型了,今天我们从传输层
实现应用层
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看浏览器是否能够识别
也是成功的返回了