上周我研究了 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 应用程序中?
有一个实现在Jetty http://blogs.webtide.com/gregw/entry/jetty_websocket_server。我们可以希望tomcat和jetty找到兼容的API。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)