Jetty 12.1核心与EE8 WebSocket API注解混用差异原因咨询
Jetty 12.1.x核心WebSocket API与EE8 WebSocket API注解混用差异解析
核心API的设计逻辑:Jetty的核心WebSocket API是原生实现,主打清晰的职责划分和高效的消息处理。一旦你用了
@OnWebSocketFrame,就表示要手动接管所有帧级别的处理工作——不管是文本、二进制消息,还是ping、pong帧。如果同时加了@OnWebSocketMessage、@OnWebSocketPing这类注解,核心API会搞不清该把帧交给哪个处理器,很容易出现重复处理或者逻辑混乱的情况。所以核心API直接从规则上禁止这种混用,逼着开发者选一种明确的处理模式。EE8 API的兼容性考量:EE8的WebSocket规范(JSR 356)本身就允许同时使用
@OnWebSocketFrame和其他消息类注解。Jetty作为EE8规范的实现方,必须跟规范对齐,还要保证和其他EE8兼容容器的行为一致。另外很多老项目基于EE8开发时已经用了这种混用写法,为了不破坏这些现有应用的正常运行,Jetty的EE8实现就保留了允许混用的行为。实际处理的区别:在EE8实现里,当两类注解共存时,Jetty会按JSR 356规范的优先级来处理——
@OnWebSocketFrame会先拿到所有帧,之后如果是文本/二进制消息、ping或pong类型的帧,对应的特定注解方法也会被触发。而核心API没有这种兼容逻辑,直接要求开发者二选一,避免处理流程模糊不清。
内容的提问来源于stack exchange,提问作者Emdi Hossain
相关产品推荐
相关产品推荐

