我上周看了一下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应用程序中?
答案 0 :(得分:8)
Jetty中有一个实现。我们希望tomcat和jetty找到兼容的API。
答案 1 :(得分:6)
Glassfish Atmosphere项目将按您的意愿行事。您可以定义一个servlet来完成所有工作。
答案 2 :(得分:0)
jWebSocket
声称作为Tomcat应用程序运行。遗憾的是,jWebSocket
的二进制分发版中缺少某些文件。有些人正在尝试重新编译jWebSocket
并获取必要的文件,因为源代码可用。总而言之,jWebSocket
似乎不是一个可靠的产品。
答案 3 :(得分:-3)
是的,有一个非常好的(开源和完全免费):http://www.jWebSocket.org