在 Tomcat 服务器中,WebSocket(WS)服务和 HTTP 服务可以通过同一个端口(通常是 80
或 443
)共存,但它们的底层协议和处理机制不同。以下是具体说明:
1. 协议兼容性
- HTTP 基于请求-响应模式,而 WebSocket 是基于全双工通信的持久化协议。
- Tomcat 通过 Upgrade 机制实现协议切换:客户端通过 HTTP 请求发起 WebSocket 握手(包含
Upgrade: websocket
头),成功后切换到 WebSocket 协议。
2. Tomcat 的配置
- Tomcat 7(及以上版本)原生支持 WebSocket(遵循 JSR-356 规范)。
- 无需额外端口:WebSocket 握手阶段通过 HTTP 完成,后续通信在同一 TCP 连接上升级为 WebSocket 帧传输。
- 同一
Connector
:HTTP 和 WebSocket 共享同一个 Tomcat Connector(如8080
端口)。
3. 代码示例
HTTP Servlet 和 WebSocket Endpoint 可以同时部署在同一个 web应用中:
// HTTP Servlet @WebServlet("/api") public class ApiServlet extends HttpServlet { ... } // WebSocket Endpoint @ServerEndpoint("/ws") public class WebSocketEndpoint { ... }
客户端可通过以下方式访问:
- HTTP:
http://host:port/api
- WebSocket:
ws://host:port/ws
- HTTP:
✅结论
Tomcat 可以用同一个服务(同一端口)同时处理 HTTP 和 WebSocket 请求,无需额外配置或端口。两者的区别仅在于协议升级和内部处理逻辑,Tomcat会自动根据请求类型分发到对应的处理器(Servlet或WebSocket Endpoint)。
内容由零声教学AI助手提供,问题来源于学员提问