Java 由Servlet容器提供服务的WebSocket

Java 由Servlet容器提供服务的WebSocket,java,servlets,websocket,Java,Servlets,Websocket,上周我查看了WebSocket,并对如何使用JavaServletAPI实现服务器端做了一些思考。我没有花太多时间,但在使用Tomcat进行的一些测试中遇到了以下问题,如果不修补容器或至少对HttpServletResponse实现进行特定于容器的修改,这些问题似乎无法解决: WebSocket规范要求在101 HTTP响应中定义一条消息。HttpServletResponse.setStatus(int代码,字符串消息)已被弃用,但未提及可用的替换。在更改默认的Tomcat配置之后,我让To

上周我查看了WebSocket,并对如何使用JavaServletAPI实现服务器端做了一些思考。我没有花太多时间,但在使用Tomcat进行的一些测试中遇到了以下问题,如果不修补容器或至少对HttpServletResponse实现进行特定于容器的修改,这些问题似乎无法解决:

  • WebSocket规范要求在101 HTTP响应中定义一条消息。HttpServletResponse.setStatus(int代码,字符串消息)已被弃用,但未提及可用的替换。在更改默认的Tomcat配置之后,我让Tomcat接受我的消息字符串,但由于该方法已被弃用,我不确定这是否适用于其他servlet容器

  • WebSocket规范要求在对连接升级请求的HTTP响应中指定头几个头的顺序。ServletAPI没有提供一种方法来指定响应头的顺序,Tomcat将自己的头添加到响应中,将其中的一些头放在servlet实现添加的任何头之前

  • 由于在提交头时不知道响应的内容长度,Tomcat会自动切换到响应的分块传输编码,这与WebSocket规范不兼容


我是否遗漏了一些明显的东西,或者说在基于servlet的web应用程序中集成WebSocket服务器端点真的不可能?

是的,有一个非常好的(开源且完全免费):

中有一个实现。我们希望tomcat和jetty能够找到一个兼容的API。

该项目将满足您的需求。您可以定义一个servlet来完成所有工作

jWebSocket声称作为Tomcat应用程序运行。不幸的是,
jWebSocket
的二进制发行版中缺少一些文件。由于源代码可用,一些人正在尝试重新编译
jWebSocket
并获取必要的文件。总之,
jWebSocket
似乎不是一个可靠的产品。

不,jWebSocket不是基于servlet的。我知道,但我或多或少希望WebSocket支持应该可以使用标准servlet API,而不是使用任何特定于容器的扩展。我理解。那么只有即将推出的Servlet3.0规范才是解决方案。目前的规格是测试版(我想)。但是这个规范已经有了一些实现。当然是在beta版中。我遇到了几乎相同的问题。我真的很想扩展Tomcat,以展示我希望“WebSocket Servlet”在添加到JavaEE规范时的样子。要了解我是如何入侵Tomcat的,你可以看看我的补丁,我也有同样的经历