javascript - http.Server クラスの close() メソッドについての質問◔ ‸◔?
为情所困
为情所困 2017-05-16 13:42:34
0
1
771

コード

リーリー

説明

なぜserver.close(),却不能触发 closeイベントを使用するのですか?
HTTP API の説明を見てください:

新しい接続を受信するサーバーを停止します。

TCP API の説明:

サーバーが新しい接続の受け入れを停止し、既存の接続のみを維持します。この関数は非同期であり、すべての接続が切断されるとサーバーが閉じられ、「close」イベントが生成されます...

オリジナルserver.close() 只是使服务器停止接收新连接,并没有直接操作关闭服务器。只有当所有连接都断开的时候,服务器才会处于关闭状态并且发射 closeイベント。

ただし、コードを遅延呼び出しに変更すると、サーバーが直接シャットダウンされる可能性があります (もちろん、HTTP接続は 5 秒以内に確立する必要があります)。

リーリー

質問

API の説明に従う場合、close()メソッドは、サーバーによる新しい接続の受け入れを停止するだけです。では、なぜ後者の方法に変更することでサーバーを直接シャットダウンできるのでしょうか?

为情所困
为情所困

全員に返信(1)
PHPzhong

APIの説明は正しいです。どちらのタイプのシャットダウン http サービスも最終的にはシャットダウンされますが、実行ロジックが異なります。

実行プロセス

コード 1 は、http 接続を要求するまで閉じずに http 接続が確立されるのを待ち、この要求の 2 分後に http サービスを閉じます。

コード 2 は 5 秒間待機します。5 秒以内に接続が確立されない場合、http サービスは直接終了します。 5 秒以内に http 接続をリクエストすると、http サービスはリクエストから 2 分後に終了します。

プロセスを実行する理由

原来 server.close() 只是使服务器停止接收新连接,并没有直接操作关闭服务器。只有当所有连接都断开的时候,服务器才会处于关闭状态并且发射 close 事件。 问题在于什么时候算所有连接都断开?

res.end('res ok'); を実行すると、リクエストにより http 接続は閉じられません Connectionkeep-alive この時点では、http サービスのみがデータを返し、ブラウザはページをレンダリングし、http 接続はそのままになります。その後、2 分以内に新しいリクエストがない場合、今度は http 接続が閉じられます。 2 分は、http サービス (http リクエストではない) のデフォルトのタイムアウトです。

もうすぐ

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート