Node.js 网络编程概要
Node.js 是一个高效的服务器端 JavaScript 运行环境,它提供了一系列的网络编程模块,可以用于创建各种类型的网络应用程序和服务。本文将介绍 Node.js 中常用的网络编程模块和相关概念。
网络通信基础
在网络通信中,常用的协议有 TCP 和 UDP。TCP 是一种可靠的、面向连接的协议,它将数据分割成数据包进行传输,并确保数据包按照正确的顺序接收。UDP 是一种无连接的协议,它将数据包独立地发送给接收者,不保证数据包的正确接收顺序和完整性。
在 Node.js 中,可以使用 net
模块来创建 TCP 服务器和客户端,使用 dgram
模块来创建 UDP 服务器和客户端。
TCP 服务器
使用 net
模块的 createServer()
方法可以创建一个 TCP 服务器。服务器监听指定的端口,并在有客户端连接时触发 connection
事件。
const net = require('net');
const server = net.createServer((socket) => {
console.log('client connected');
socket.on('data', (data) => {
console.log(data.toString());
});
socket.on('end', () => {
console.log('client disconnected');
});
});
server.listen(8080, () => {
console.log('server started');
});
上面的代码创建了一个 TCP 服务器,监听 8080 端口。当有客户端连接时,会打印 client connected
,并在接收到客户端发送的数据时打印该数据。当客户端断开连接时,会打印 client disconnected
。
TCP 客户端
使用 net
模块的 connect()
方法可以创建一个 TCP 客户端。客户端连接指定的服务器地址和端口,并在连接成功后触发 connect
事件。
const net = require('net');
const client = net.connect({ port: 8080 }, () => {
console.log('connected to server!');
client.write('hello server!');
});
client.on('data', (data) => {
console.log(data.toString());
client.end();
});
client.on('end', () => {
console.log('disconnected from server');
});
上面的代码创建了一个 TCP 客户端,连接到 8080 端口的服务器。当连接成功时,会打印 connected to server!
,并向服务器发送 hello server!
。客户端接收到服务器发送的数据时,会打印该数据。当与服务器断开连接时,会打印 disconnected from server
。
UDP 服务器
使用 dgram
模块的 createSocket()
方法可以创建一个 UDP 服务器。服务器监听指定的端口,并在接收到数据时触发 message
事件。
const dgram = require('dgram');
const server = dgram.createSocket('udp4');
server.on('message', (msg, rinfo) => {
console.log(`server got: ${msg} from ${rinfo.address}:${rinfo.port}`);
});
server.on('listening', () => {
const address = server.address();
console.log(`server listening ${address.address}:${address.port}`);
});
server.bind(8080);
上面的代码创建了一个 UDP 服务器,监听 8080 端口。当接收到客户端发送的数据时,会打印该数据和客户端的地址和端口。
UDP 客户端
使用 dgram
模块的 createSocket()
方法可以创建一个 UDP 客户端。客户端向指定的服务器地址和端口发送数据,并在接收到服务器回复时触发 message
事件。
const dgram = require('dgram');
const client = dgram.createSocket('udp4');
const message = Buffer.from('hello server!');
client.on('message', (msg, rinfo) => {
console.log(`client got: ${msg} from ${rinfo.address}:${rinfo.port}`);
client.close();
});
client.send(message, 8080, 'localhost', (err) => {
if (err) throw err;
console.log('message sent to server');
});
上面的代码创建了一个 UDP 客户端,向 localhost 的 8080 端口发送数据。当接收到服务器回复时,会打印该数据和服务器的地址和端口。客户端发送完数据后,调用 close()
方法关闭客户端。
总结
本文介绍了 Node.js 中常用的网络编程模块和相关概念,包括 TCP 服务器和客户端、UDP 服务器和客户端。通过这些模块和方法,可以轻松地创建各种类型的网络应用程序和服务。