3. 认识 TCP
作为前端,对 HTTP 应该是比较熟悉的。无论是使用 axios 发 ajax 请求与服务端交互,还是使用 express、koa 搭建一个 HTTP 服务器,都是和 HTTP 打交道。
而 TCP 相对来说熟悉程度就低一些了。本文会简单介绍一下如何使用 node 搭建一个 TCP 服务器和 TCP 客户端。
服务端
// server.js
const net = require('net');
const server = net.createServer((socket) => {
socket.on('data', (data) => {
console.log('data from client:', data);
socket.write('Hello from server.');
});
});
server.listen(4001);
客户端
// client.js
const net = require('net');
const socket = net.connect(4001, '127.0.0.1', () => {
socket.write('Hello from client');
});
socket.on('data', (data) => {
console.log('data from server:', data);
});
如图所示,net 模块的 createServer 方法创建的其实是一个 TCP 服务器。TCP 的服务端和客户端之间的通信使用的是一对 socket。socket 是一个 Duplex,可读可写的 stream。这里不对 stream 做过多介绍,只需要知道:
socketA.write(data1),那么就会触发 socketB 的 data 事件,并且参数为 data1
先运行 node server.js,然后运行 node client.js,结果如下:
根据上一节对 Buffer 的介绍,我们知道 server 收到了来自 client 的消息:Hello from client,然后发了一条 Hello from server. 给 client。这也是 TCP 传输数据的方式。