上周我正在查看 WebSockets,并就如何使用 Java Servlet API 实现服务器端提出了一些想法。我没有花太多时间,但在使用 Tomcat 的一些测试中遇到了以下问题,如果不修补容器或至少对 HttpServletResponse 实现进行容器特定修改,这些问题似乎无法解决:
WebSocket 规范要求在 101 HTTP 响应中定义一个消息。HttpServletResponse.setStatus(int code, String message) 已被弃用,但没有提及可用的替代品。更改默认 Tomcat 配置后,我让 Tomcat 尊重我的消息字符串,但由于该方法已弃用,我不确定这是否适用于其他 servlet 容器。
WebSocket 规范要求对连接升级请求的 HTTP 响应中前几个标头的指定顺序。servlet API 不提供指定响应标头顺序的方法,并且 Tomcat 将自己的标头添加到响应中,将其中一些标头放在任何标头之前,这些标头由 servlet 实现添加。
由于在提交 header 时不知道响应的内容长度,因此 Tomcat 会自动为响应切换为分块传输编码,这与 WebSocket 规范不兼容。
我是否遗漏了一些明显的东西,或者真的不可能将 WebSocket 服务器端点集成到基于 servlet 的 Web 应用程序中?