由 Servlet 容器提供服务的 WebSockets

2022-09-04 03:48:22

上周,我看了一下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 规范不兼容。

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


答案 1

在码头有一个实现。我们可以希望tomcat和jetty找到一个兼容的API。


答案 2

玻璃鱼大气项目将做你想做的事。您可以定义一个 servlet 来完成所有工作。


推荐