Heim >Web-Frontend >js-Tutorial >Ausführliche Erläuterung der TCP/IP-Datenkommunikation in Node.js
Dieser Artikel enthält hauptsächlich einen Artikel über die TCP/IP-Datenkommunikation für das Node.js-Lernen (Erklärung mit Beispielen). Der Herausgeber findet es ziemlich gut, deshalb werde ich es jetzt mit Ihnen teilen und es allen als Referenz geben. Folgen wir dem Herausgeber und schauen wir uns das an. Ich hoffe, es kann allen helfen.
1. Verwenden Sie das Netzmodul, um TCP-basierte Datenkommunikation zu implementieren.
Stellt ein Netzmodul zur Realisierung der Kommunikation zwischen TCP-Server und TCP-Client bereit.
1.1 Erstellen ein TCP-Server
Verwenden Sie das Netzmodul in Node.js, um einen TCP-Server zu erstellen
var server = net.createServer([options],[connectionListener]) //options:false当TCP服务器接收到客户端发送的一个FIN包时将会回发一个FIN包 true当TCP服务器接收到客户端发送的一个FIN包时将不会回发FIN包,这使得TCP服务器可以继续向客户端发送数据,但不会继续接收客户端发送的数据。来发者必须调用end方法来关闭socket连接。默认为false connectionListener:指定当客户端与服务器端简历连接时所要调用的回调函数 function(socket){ //回调函数代码 }
Der Parameterwert ist das Socket-Port-Objekt, auf das der TCP-Server lauscht. Die Methode „createServer“ gibt zurück der erstellte TCP-Server
Wenn der Client eine Verbindung mit dem Server herstellt, wird das Verbindungsereignis ausgelöst. Sie können die folgende Methode verwenden, um die Rückruffunktion auszuführen
server.on('connection',function(socket){ //回调函数代码 })
Nach dem Erstellen des TCP Server, verwenden Sie die Listen-Methode, um den Server zu benachrichtigen, mit dem Lauschen auf Client-Verbindungen zu beginnen
server.listen(port,[host],[backlog],[callback]) //port指定需要监听的端口号, host:指定需要监听的IP地址或主机名,如果省略,服务器将监听来自于任何IPv4地址的客户端连接 backlog:指定位于等待队列中的客户端连接的最大数量 callback:无参回调函数 server.listen(path,[callback]) //server:代表一个使用unix端口的服务器 path:指定需要监听的路径,会触发listening事件,然后执行回调函数callback server.listenting(handle,[callback]) //server 代表一个TCP服务器 handle:指定需要监听的socket句柄(该句柄可以为一个TCP服务器对象,socket端口对象,文件描述符)
Nehmen Sie nun ein Beispiel zum Erstellen eines TCP-Servers:
var net = require('net') var server = net.createServer(function(socket){ console.log('客户端与服务器连接已建立') }) server.listen(8431,'localhost',function(){ console.log('服务器端开始监听') })
Nach dem Ausführen Sie können die folgenden Ergebnisse erhalten:
Verwenden Sie Telnet, um auf den entsprechenden Server zuzugreifen:
telnet localhost 8431
Die Ergebnisse werden wie folgt sein:
Beispiel für ein Socket-Port-Objekt:
var net = require('net') var file = require('fs').createWriteStream('./message.txt'); var server = net.createServer(function(socket){ console.log('客户端与服务器连接已建立') server.getConnections(function(err,count){ console.log('当前存在%d个客户端连接。',count); server.maxConnections = 4; console.log('TCP服务器的最大连接数为%d',server.maxConnections); }) // server.close(function(){ // console.log('TCP服务器被关闭。'); // }) }) server.listen(8431,'localhost',function(){ console.log('服务器端开始监听') }) server.on('connection',function(socket){ address = socket.address(); console.log('被监视的地址信息为%j',address); socket.pipe(file); socket.setEncoding('utf8'); socket.on('data',function(data){ console.log(data.toString()); console.log('已接受到%d字节数据。',socket.bytesRead); }); socket.on('end',function(){ file.end('再见') console.log('客户端连接被关闭。') }) socket.pause(); setTimeout(function(){ console.log('*************') socket.resume(); socket.pipe(file,{end:false}); },30*1000); // socket.pipe(file,{end:false}); // setTimeout(function(){ // file.end('再见。'); // socket.unpipe(file); // },5000); socket.setTimeout(10*1000); socket.on('timeout',function(){ console.log('客户端连接超时'); socket.setTimeout(0); }) })
1.2 Erstellen eines TCP-Clients
Beispiel für das Erstellen eines TCP-Clients:
var net = require("net"); var client = new net.Socket(); client.setEncoding('utf8'); client.connect(8431,'localhost',function(){ console.log('已连接到服务器'); client.write('你好'); console.log('当前已发送%d字节',client.bytesWritten); client.end('再见') console.log('当前已发送%d字节',client.bytesWritten); // setTimeout(function(){ // client.end('再见'); // },10*1000) }); client.on('data',function(data){ //console.log('已接收服务器端发送的数据: '+data); console.log('已接收服务器端发送的数据'); }) client.on('error',function(err){ console.log('与服务器连接或通信的过程中发生了一个错误,错误编码为%s',err.code); client.destroy(); })
Gleichzeitig müssen Sie einen entsprechenden Server erstellen:
var net = require('net'); var fs = require('fs'); var server = net.createServer(); server.on('connection',function(socket){ console.log('客户端与服务器端连接已建立'); socket.setEncoding('utf8'); var readStream = fs.createReadStream('./server.js'); readStream.on('data',function(data){ var flag = socket.write(data); console.log('write方法的返回值为:'+flag); console.log('缓存队列中当前缓存了%d字符。',socket.bufferSize); }) socket.on('data',function(data){ console.log('已连接客户端发送的数据:'+data); socket.write('确认数据:'+data); }) socket.on('error',function(err){ console.log('客户端通信的过程中发生了一个错误,错误编码为%s',err.code); socket.destroy(); }) socket.on('end',function(){ console.log('客户端连接被关闭。'); server.unref(); }) socket.on('close',function(had_error){ if(had_error){ console.log('由于一个错误导致socket端口被关闭。'); server.unref(); }else{ console.log('socket端口被正常关闭。'); } }) server.getConnections(function(err,count){ if(count==2) server.close(); }); }); server.listen(8431,'localhost'); server.on('close',function(){ console.log('TCP服务器被关闭。'); })
Verwenden Sie die folgende Methode in Node.js. Erkennungspakete können kontinuierlich an den Client oder Server gesendet werden, um den Verbindungsstatus zu ermitteln;
socket.setKeepAlive([enable],[initialDelay]) //enable:true:启用Keep-alive机制,不断向对方发送一个探测包,如果没有回应表示连接关闭 initialDelay:间隔时间(毫秒)
Verwandte Empfehlungen:
Node.js erstellt Web- und TCP-Server
Eine kurze Analyse der drei -Wege-Handshake und Vier-Wellen-Strategie der TCP-Übertragung
Was ist der Unterschied zwischen TCP/IP und UDP
Das obige ist der detaillierte Inhalt vonAusführliche Erläuterung der TCP/IP-Datenkommunikation in Node.js. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!