Tomcat 6で彗星を使用してクライアントにデータをプッシュします。cometサーブレット用のtomcat 6の出力バッファリングを無効にする
接続を閉じる前にデータを受信したい(XMLHttpRequestの準備状態= 3)。問題は、Tomcat 6がデータを送信する前にバッファリングしているため、これを達成するために厄介なことをする必要があるということです。
リクエストのコンテンツタイプをapplication/x-javascriptに、reqのコンテンツタイプをapplication/xml(ブラウザのキャッシュを無効にするため)に設定しました。
私は、キャッシュを無効にするためにtomcat 6の多くの利用可能なオプションを使用しています(ソケットコネクタなどでsocketBuffer = -1)。これはローカルのtomcat 6(windows os)で動作しますデフォルトのオプションを変更する)。
しかし、同じ設定のtomcat 6の場合、http://jelastic.comで提供されているtomcat 6サーバーにアプリケーションをデプロイすると、サーバーの出力バッファーが大きくなり、出力ライターのフラッシングをトリガーするために空のバイトを送信する義務があります。次のコード)
バイト[] bytes =新しいバイト[event.getHttpServletResponse().getBufferSize() - 新しいGson()。toJson(messagesContent).getBytes()。length]; event.getHttpServletResponse()。getOutputStream()。(新しいGson()。toJson(messagesContent).getBytes()); event.getHttpServletResponse()。getOutputStream()。write(bytes); event.getHttpServletResponse()。getOutputStream()。flush();
データコンテンツに加えてバイトを書き込まないと、データはクライアントに送信されません。これは本当に面倒です、私は無駄な空のバイトを送信するため、私はクライアント上でこれらの空のバイトを管理する必要があるためです。恐ろしい。
解決方法はありますか? cometサーブレット出力バッファを無効にする方法。出力バッファは、デフォルトでcometサーブレットに対して無効にする必要があります。奇妙に聞こえる。事前による
おかげで、
J