实现思路
- 引入模块:引入Node.js的
net
模块用于创建TCP服务器。
- 创建服务器:使用
net.createServer()
方法创建TCP服务器实例。
- 记录连接时间:在
connection
事件中,记录每个客户端的连接时间。
- 处理断开连接:在
end
事件中,计算连接时长,并向其他在线客户端广播断开信息。
- 维护在线客户端:使用一个数组或对象来维护当前在线的客户端。
关键代码片段
const net = require('net');
// 存储在线客户端及其连接时间
const clients = [];
const server = net.createServer((socket) => {
// 记录连接时间
const connectTime = new Date();
clients.push({ socket, connectTime });
socket.on('end', () => {
// 找到断开连接的客户端
const disconnectedClient = clients.find((client) => client.socket === socket);
if (disconnectedClient) {
const index = clients.indexOf(disconnectedClient);
clients.splice(index, 1);
// 计算连接时长
const duration = new Date() - disconnectedClient.connectTime;
// 广播断开信息
clients.forEach((client) => {
client.socket.write(`Client disconnected. Connection duration: ${duration}ms\n`);
});
}
});
});
const port = 3000;
server.listen(port, () => {
console.log(`Server listening on port ${port}`);
});