js实现tcp
使用Node.js实现TCP通信
Node.js内置的net模块提供了TCP通信的基础功能,可以创建TCP服务器和客户端。
创建TCP服务器
const net = require('net');
const server = net.createServer((socket) => {
console.log('客户端已连接');
socket.on('data', (data) => {
console.log(`收到数据: ${data}`);
socket.write(`服务器已收到: ${data}`);
});
socket.on('end', () => {
console.log('客户端已断开连接');
});
});
server.listen(8080, () => {
console.log('服务器正在监听8080端口');
});
创建TCP客户端
const net = require('net');
const client = net.connect({port: 8080}, () => {
console.log('已连接到服务器');
client.write('Hello Server!');
});
client.on('data', (data) => {
console.log(`收到服务器数据: ${data}`);
client.end();
});
client.on('end', () => {
console.log('已断开与服务器的连接');
});
处理错误事件
TCP通信中需要处理可能的错误:

socket.on('error', (err) => {
console.error('连接错误:', err);
});
server.on('error', (err) => {
console.error('服务器错误:', err);
});
自定义协议实现
对于复杂应用,通常需要自定义协议:

// 使用分隔符处理消息边界
const DELIMITER = '\n';
socket.on('data', (data) => {
const messages = data.toString().split(DELIMITER);
messages.forEach(msg => {
if(msg) console.log(`收到消息: ${msg}`);
});
});
// 发送消息时添加分隔符
socket.write(`自定义消息${DELIMITER}`);
保持连接活跃
可以设置keepalive选项防止连接超时:
const server = net.createServer({
keepalive: true,
keepaliveInitialDelay: 10000
}, (socket) => {
// 处理逻辑
});
性能优化建议
对于高并发场景,考虑使用连接池和负载均衡。Node.js的集群模块可以帮助利用多核CPU:
const cluster = require('cluster');
const numCPUs = require('os').cpus().length;
if (cluster.isMaster) {
for (let i = 0; i < numCPUs; i++) {
cluster.fork();
}
} else {
// 创建TCP服务器
}






