4

多くの Web 言語でよく見られる問題は、データベース接続を閉じる必要があることです。そうしないと、合計接続数が徐々に増加し、何らかの形で停止してしまいます。

HTTP はステートレスです。リクエストの処理が完了したときに、これらの言語は、リクエストが開いた接続をドロップできないのはなぜですか? 開いたままにしておく正当な理由はありますか?

4

2 に答える 2

4

データベースを開く、認証する、およびアクセスを許可するコストは非常に高くつくためです。そのため、通常は誰もがデータベース接続プールを使用します。要求ハンドラーがプールから使用可能な既に開いている接続を取得している間、接続はまだ開いています。接続を閉じると、実際に起こっていることは、他の人が使用できるように接続が解放されるということです。

答える ...

なぜこれらの言語は、要求が開かれた接続を単にドロップできないのでしょうか? 開いたままにしておく正当な理由はありますか?

要求が完了した後も接続が開いたままになり、他の目的に使用される場合があります。たとえば、データの非同期更新。しかし、私はあなたと一緒です。90% の場合、リクエストが終了すると、開かれた接続はプールに戻されます。使用する Web フレームワーク (Spring、DJANGO など) によっては、この種の動作を構成したり、少なくとも最小限の労力で実装したりできます。

于 2011-05-24T13:04:20.880 に答える
0

http 接続を閉じている間に開いている接続をチェックするとオーバーヘッドが増えるため、一部の言語ではデフォルトで閉じられないのはそのためだと思います。

また、明示的に閉じない場合は、ガベージ コレクターが処理を行う必要があり、時間がかかります。

于 2011-05-24T13:03:38.317 に答える