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