私は、Ubuntu(JDK 1.6)でTomcat 6.0.24を、HTTPSコネクタ(APRを使用せずにTomcatに対して直接)でコメットスタイルのリクエストを実行するアプリで使用しています。
キープアライブを5分に設定したいので、ロングポーリング接続を更新する必要はありません。これが私の設定です:
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="1000" keepAliveTimeout="330000"
scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" />
残念ながら、サーバーは65秒後に接続を閉じているようです。サンプルセッションのpcapは次のようになります。
T=0 Client sends SYN to server, handshake etc.
T=65 Server sends FIN to client
T=307 Client sends FIN to server
(クライアントでの5分のタイムアウトは、HTTP libがサーバーエンドでソケットのクローズを検出しないことが原因であると思いますが、いずれにしても、サーバーが接続を早期にクローズするべきではありません)
(編集:これは、標準のHTTPコネクターを使用する場合に期待どおりに機能します)
AmazonのELB(Elastic Load Balancer)には、ドキュメント化されていない( フォーラムを除く )60秒のタイムアウトがあり、データが送信されなかった場合に接続が切断されます。 55秒ごとに空白を送信することによるハッキングは、これを構成可能にするまで機能するようです。
接続を閉じるロードバランサーのタイムアウトが 文書化されました :
ロードバランサーのアイドルタイムアウト設定を構成するには
- https://console.aws.Amazon.com/ec2/ でAmazon EC2コンソールを開きます。
- ナビゲーションウィンドウのLOAD BALANCINGで、Load Balancersをクリックします。
- ロードバランサーを選択します。
- 下部のペインで、説明タブを選択します。
- 接続設定を見つけて、(編集)をクリックします。
- Configure Connection Settingsダイアログボックスで、Idle Timeoutの値を入力します。アイドルタイムアウトの範囲は1〜3,600秒です。
- 保存をクリックします。
非アクティブな接続のタイムアウトについては、ヘルスチェックのトラブルシューティングのセクションで説明しています: http://docs.amazonwebservices.com/ElasticLoadBalancing/latest/DeveloperGuide/ts-elb-healthcheck.html
ELBアイドルタイムアウトの範囲が更新され、1秒(最小)から4000秒(最大)まで可能で、アイドルタイムアウトのデフォルト値は60秒です。
https://docs.aws.Amazon.com/elasticloadbalancing/latest/classic/config-idle-timeout.html