私は先週 WebSocket を調べていて、Java Servlet API を使用してサーバー側を実装する方法についていくつか考えました。私はあまり時間をかけませんでしたが、Tomcat を使用したいくつかのテスト中に次の問題に遭遇しました。これらの問題は、コンテナーにパッチを適用するか、少なくとも HttpServletResponse 実装にコンテナー固有の変更を加えなければ解決できないようです。
WebSocket 仕様では、101 HTTP 応答で定義されたメッセージが義務付けられています。HttpServletResponse.setStatus(int code, String message) は、使用可能な代替品について言及せずに廃止されました。デフォルトの Tomcat 構成を変更した後、Tomcat がメッセージ文字列を尊重するようにしましたが、メソッドが非推奨になっているため、これが他のサーブレット コンテナーで機能するかどうかはわかりません。
WebSocket 仕様では、接続アップグレード要求に対する HTTP 応答の最初のいくつかのヘッダーの指定された順序が必要です。サーブレット API は、応答ヘッダーの順序を指定する方法を提供しません。Tomcat は独自のヘッダーを応答に追加し、サーブレット実装によって追加される任意のヘッダーの前にいくつかのヘッダーを配置します。
ヘッダーのコミット時に応答のコンテンツの長さが不明であるため、Tomcat は応答のチャンク転送エンコーディングに自動的に切り替えますが、これは WebSocket 仕様と互換性がありません。
明らかな何かが欠けていますか、それとも WebSocket サーバーエンドポイントをサーブレットベースの Web アプリに統合することは本当に不可能ですか?