MST

星途 面试题库

面试题:JavaScript中如何使用Node.js搭建非HTTP网络服务器的基础架构

请简述在Node.js环境下,使用JavaScript搭建一个简单的非HTTP网络服务器(如TCP或UDP服务器)的基本步骤,包括引入模块、创建服务器实例、监听端口以及处理客户端连接等关键部分的代码实现思路。
38.4万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试
  1. 引入模块
    • 对于TCP服务器,引入net模块。示例代码:
    const net = require('net');
    
    • 对于UDP服务器,引入dgram模块。示例代码:
    const dgram = require('dgram');
    
  2. 创建服务器实例
    • TCP服务器
      • 使用net.createServer()方法创建TCP服务器实例。该方法接受一个回调函数,此回调函数在每次有新的客户端连接时被调用。示例代码:
      const server = net.createServer((socket) => {
        // 处理客户端连接逻辑
      });
      
    • UDP服务器
      • 使用dgram.createSocket()方法创建UDP服务器实例。可以传入udp4udp6指定协议版本,也可以省略,默认udp4。示例代码:
      const server = dgram.createSocket('udp4');
      
  3. 监听端口
    • TCP服务器
      • 使用server.listen()方法监听指定端口。示例代码:
      const port = 3000;
      server.listen(port, () => {
        console.log(`TCP server listening on port ${port}`);
      });
      
    • UDP服务器
      • 使用server.bind()方法监听指定端口。示例代码:
      const port = 4000;
      server.bind(port, () => {
        console.log(`UDP server listening on port ${port}`);
      });
      
  4. 处理客户端连接
    • TCP服务器
      • net.createServer()的回调函数中处理客户端连接。例如,可以监听data事件获取客户端发送的数据,end事件表示客户端断开连接。示例代码:
      const net = require('net');
      const server = net.createServer((socket) => {
        socket.on('data', (data) => {
          console.log('Received data from client:', data.toString());
          socket.write('Message received by server!');
        });
        socket.on('end', () => {
          console.log('Client disconnected');
        });
      });
      const port = 3000;
      server.listen(port, () => {
        console.log(`TCP server listening on port ${port}`);
      });
      
    • UDP服务器
      • 监听message事件来处理接收到的UDP数据包。此事件的回调函数接收两个参数:msg(接收到的数据)和rinfo(发送方的地址信息)。示例代码:
      const dgram = require('dgram');
      const server = dgram.createSocket('udp4');
      server.on('message', (msg, rinfo) => {
        console.log('Received message from', rinfo.address, ':', msg.toString());
        const response = 'Message received by server!';
        server.send(response, 0, response.length, rinfo.port, rinfo.address, (err) => {
          if (err) {
            console.error(err);
          }
        });
      });
      const port = 4000;
      server.bind(port, () => {
        console.log(`UDP server listening on port ${port}`);
      });