在 Tomcat 7 中运行 Java EE 7 WebSockets

Posted

技术标签:

【中文标题】在 Tomcat 7 中运行 Java EE 7 WebSockets【英文标题】:Run Java EE 7 WebSockets in Tomcat 7 【发布时间】:2013-07-11 18:22:11 【问题描述】:

Java EE 7 已经发布,我喜欢的功能之一是标准 Websockets。目前我在 Tomcat 7 中工作,有没有办法将 Java EE 7 Websockets 集成到我的 Tomcat 7 中? 我在 Tyrus Websocket 的文档中搜索它没有成功

更新:Tomcat 7.0.47 带有 Websocket 支持,是的,宝贝!

【问题讨论】:

【参考方案1】:

不可能在 Tomcat 7 中使用 Tyrus WebSocket 实现。它可能在 Tomcat 8 中工作,但不太可能,因为 WebSocket 存在一些问题,这意味着不可能直接在上面实现 WebSocket Servlet 3.1 API 除非 Servlet 3.1 实现弯曲了一些规则。 (顺便说一句,我将在今年的 JavaOne 上讨论这个问题)。据我所知,大多数实现都使用容器特定的 API 来解决这些问题(并获得更好的性能)。

Tomcat 的 Java WebSocket 1.0 (JSR-356) 实现目前仅在 Tomcat 8 中可用。一旦它稳定,它一直计划将该实现向后移植到 Tomcat 7。我认为这一点很接近。一段时间以来,该实现已经通过了客户端和服务器的 Autobahn TestSuite。在过去的几天里,一些人一直在对其进行压力测试并发现了一些问题 - 所有这些问题都已得到修复。

今天,您需要从源代码构建 Tomcat 8 以获得基于 Tomcat 的 JSR-356 实现。在接下来的几个版本中(大约每个月都有一个新的 Tomcat 7 版本)的某个时间,JSR-356 实现也将在 Tomcat 7 中可用。

如果您不想从源代码构建,我相信 Glassfish 是您目前实现 JSR-356 的唯一选择。我知道 Jetty 和 JBoss 正在开发一个,但我不知道他们离完成还有多远。

【讨论】:

你知道 JSR-356 什么时候可以在 Tomcat 7 中使用吗? 最好的猜测是 next 之后的版本,应该是 9 月初的 7.0.44,但这只是一个猜测。很多事情都可以改变这一点。 所以基本上 Tomcat 已经扩展为一个 servlet 容器,现在也将实现 JSR-356? Tomcat 始终实现 Servlet 和 JSP 规范。 EL 规范的支持是从 JSP 规范中分离出来的,现在 Tomcat 正在添加对 WebSocket 规范的支持。

以上是关于在 Tomcat 7 中运行 Java EE 7 WebSockets的主要内容,如果未能解决你的问题,请参考以下文章

Oracle Java EE 7 JSF 示例不适用于 Tomcat

Tomcat version 7.0 only supports J2EE 1.2, 1.3, 1.4, and Java EE 5 and 6 Web modules

错误:Tomcat version 7.0 only supports J2EE 1.2, 1.3, 1.4, and Java EE 5 and 6 Web

报错修改:Tomcat version 7.0 only supports J2EE 1.2, 1.3, 1.4, and Java EE 5 and 6 Web

解决Tomcat version 7.0 only supports J2EE 1.2, 1.3, 1.4, and Java EE 5 and 6 Web modules

J2EE_Tomca同配置问题解决