Node.js でのネットワーク通信にソケットを使用するのは一般的な方法であり、ネットワーク サーバーやクライアント アプリケーションの構築によく使用されます。ただし、ネットワーク通信中に Socket 接続の切断が必要になる場合があるため、この記事では Node.js を使用して Socket 接続の切断を管理する方法を紹介します。
1. ソケット接続を閉じる理由
ソケット接続を閉じるとは、接続の双方が設定したルールに従って接続を終了することを意味し、これは通常の操作です。 Socket が接続を閉じる理由は次のとおりです。
クライアント アプリケーションがサーバーと通信する必要がなくなった場合、時間がかかることがあります。イニシアチブ ソケット接続を閉じます。たとえば、ユーザーがクライアント アプリケーションからログアウトまたは終了するとき、またはクライアント アプリケーションがすべてのタスクを完了するときなどです。
サーバーがソケット接続が不要になったことを検出すると、接続を閉じることを選択できます。たとえば、サーバーが長期間応答しないクライアントに遭遇した場合、または接続が異常であることを発見した場合などです。
ソケットは基本的に TCP/IP プロトコルに基づくデータ ストリームですが、他のネットワーク送信方法と同様に、ソケットを使用するときにも送信エラーが発生する可能性があります。接続の中断や切断など。この場合、Socket 接続も自動的に閉じられます。
2. ソケット接続を閉じるメソッド
Node.js では、次のメソッドを使用してソケット接続を閉じることができます:
end() メソッドを使用して書き込み終了を閉じることができます。ソケットの書き込み側が閉じられると、それ以上データはソケットに送信されませんが、読み取り側も閉じられるまでデータを受信し続けることができます。 end() メソッドを使用する場合、送信される最後のデータ ブロックを渡すことを選択して、データ ブロックの送信後に接続が確実に閉じられるようにすることができます。
例:
const net = require('net'); const server = net.createServer((socket) => { // 处理连接 // ... // 关闭写入端 socket.end('Goodbye '); }); server.listen(8080);
クライアントが「Goodbye」を受信すると、接続は自動的に閉じられます。
destroy() メソッドを使用すると、現在の送信ステータスに関係なく、ソケット接続をすぐに閉じることができます。ソケット接続がすぐに閉じられると、ライターもリーダーもそれ以上の送信操作を実行できなくなります。 destroy()メソッドを使用する場合は、データ送信の中断や不完全なデータ送信を避けるために、現在のソケットのステータスと送信データに注意する必要があります。
例:
const net = require('net'); const server = net.createServer((socket) => { // 处理连接 // ... // 销毁连接 socket.destroy(); }); server.listen(8080);
destroy()メソッドを使用する場合、送信処理中にエラーが発生する可能性があるため、エラーハンドラを追加する必要があります。
const net = require('net'); const server = net.createServer((socket) => { // 处理连接 // ... // 销毁连接 socket.destroy(); socket.on('error', (err) => { console.log(`Socket 错误:${err}`); }); }); server.listen(8080);
さらに、もう 1 つの一般的なソケットを閉じる方法は、destroySoon() メソッドを使用することです。このメソッドは end() メソッドに似ていますが、残りのデータが送信されるまで待機するのではなく、すぐに接続を閉じます。ただし、このメソッドは常に信頼できるわけではないため、可能な限り end() または destroy() メソッドを使用することをお勧めします。
3. 概要
接続を閉じるソケットはネットワーク通信の重要な部分であり、Node.js では、end() メソッドと destroy() メソッドを使用して接続を閉じることができます。これを使用するときは、接続の中断やデータの損失を避けるために、現在のソケットのステータスと送信されているデータ ブロックに注意する必要があります。同時に、接続を閉じるときに、エラーを適時に検出して処理するためにエラー ハンドラーを追加する必要があります。
以上がnodejsソケット接続を閉じるの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。