面试题答案
一键面试- 关键步骤:
- 消息序列化:将发送的消息对象转换为适合在网络传输的格式,例如JSON字符串。
- 发送消息:在客户端将序列化后的消息通过TCP连接发送给服务器。
- 服务器接收:服务器监听TCP连接,接收客户端发送的消息。
- 消息反序列化:服务器接收到消息后,将其从网络传输格式(如JSON字符串)转换回对象形式。
- 消息广播:服务器将接收到的消息转发给其他连接的客户端(如果是群聊场景)。这可能需要维护一个连接池。
- 客户端接收广播:客户端接收服务器广播的消息并反序列化,然后展示给用户。
- 核心代码逻辑:
- 客户端发送消息:
const net = require('net');
const client = new net.Socket();
client.connect({port: 8080}, () => {
const message = {text: 'Hello, Server!', from: 'Client1'};
const serializedMessage = JSON.stringify(message);
client.write(serializedMessage + '\n');
});
- 服务器接收和处理消息:
const net = require('net');
const server = net.createServer((socket) => {
socket.on('data', (data) => {
const serializedMessage = data.toString().trim();
const message = JSON.parse(serializedMessage);
console.log('Received:', message);
// 广播消息给其他客户端(这里简化,假设维护一个clients数组)
// clients.forEach(c => {
// if (c!== socket) {
// c.write(serializedMessage + '\n');
// }
// });
});
});
server.listen(8080, () => {
console.log('Server listening on port 8080');
});
- 客户端接收广播消息:
const net = require('net');
const client = new net.Socket();
client.connect({port: 8080}, () => {});
client.on('data', (data) => {
const serializedMessage = data.toString().trim();
const message = JSON.parse(serializedMessage);
console.log('Received from server:', message);
});
以上代码展示了基本的消息发送、接收以及序列化和反序列化操作,在实际应用中,还需要处理连接管理、错误处理等更多细节。