聊聊关于Node中的net模块
更新时间:2023-12-18Node中的net模块是什么?
Node中的net模块是一个用于创建TCP服务器和TCP客户端的核心模块。它提供了一些高级的函数来管理网络连接和套接字。
如何创建TCP服务器?
const net = require('net'); const server = net.createServer(socket => { socket.write('Hello World!\r\n'); socket.end(); }); server.on('error', err => { throw err; }); server.listen(8080, () => { console.log('TCP服务器正在监听8080端口'); });
net.createServer()方法用于创建一个TCP服务器,它的回调函数会在每次有连接请求时被调用。回调函数提供了一个socket对象,我们可以通过socket.write()方法向客户端发送数据,通过socket.end()方法关闭连接。server.on('error')方法可以监听错误事件,server.listen()方法用于启动服务器。
如何创建TCP客户端?
const net = require('net'); const client = new net.Socket(); client.connect(8080, 'localhost', () => { console.log('已连接到TCP服务器'); client.write('Hello, server!'); }); client.on('data', data => { console.log('已从服务器接收到数据:', data.toString()); client.end(); }); client.on('close', () => { console.log('连接已关闭'); });
net.Socket()方法用于创建一个TCP客户端,client.connect()方法用于连接服务器。回调函数表示连接已经建立,我们可以通过client.write()方法向服务器发送数据。client.on('data')方法用于监听服务器发送过来的数据,client.on('close')方法用于监听连接关闭事件。
如何处理多个TCP连接?
const net = require('net'); const server = net.createServer(); let sockets = []; server.on('connection', socket => { console.log('客户端已连接'); sockets.push(socket); socket.on('data', data => { sockets.forEach(s => { if (s !== socket) { s.write(data); } }); }); socket.on('end', () => { const index = sockets.indexOf(socket); sockets.splice(index, 1); }); }); server.listen(8080);
我们可以使用一个数组来存储所有连接上来的socket。每当有新连接时,我们将socket添加到这个数组里。当socket向服务器发送数据时,我们遍历这个数组,并将数据发送给所有socket,除了发送者本身。当某个socket关闭连接时,我们从数组里移除它。
总结:Node中的net模块提供了一些高级函数来管理网络连接和套接字。我们可以使用net.createServer()方法创建TCP服务器,使用net.Socket()方法创建TCP客户端。我们可以使用数组来存储多个连接的socket,并使用它们来实现一些复杂的网络应用程序。