Jetty 9既支持其自己的Jetty Websocket API,也支持标准的JSR 356 API,我认为这是历史原因(Jetty的API先于最终的JSR 355)。
我已经查看了这两个API的基本文档,以及一些示例。这两个API看起来相当完整,也相当相似。然而,对于我正在编写的新项目,我需要选择一个而不是另一个,并且我希望避免使用API,因为它可能在未来被弃用,或者可能会变得不那么功能丰富。
那么,除了一个明显的事实是标准化的之外,两者之间还有什么重要的区别吗?
Jetty上两者的实现者:)
Jetty WebSocket API首先出现,JSR-356 API构建在其之上
JSR-356 API做了一些Jetty WebSocket API没有做的事情,比如
- 解码器用于自动将Bin/文本转换为对象
- 编码器用于自动将对象转换为Bin/文本
- 路径参数处理(也称为自动URI模板到方法参数映射)
然而,Jetty WebSocket API可以做JSR-356 API做不到的事情。
- WebSocketCreator逻辑,用于任意创建WebSocket端点,并访问HttpServlet请求
- 更好地控制超时
- 更精细的缓冲区/内存配置
- 您可以管理WebSocket扩展
- 支持端点的基于Reg-ex的路径映射
- 访问原始帧事件
- WebSocket客户端支持HTTP代理(JSR-356独立客户端没有代理的配置选项)
- WebSocket客户端支持具有超时的更好的连接逻辑
- WebSocket客户端支持SSL/TLS(JSR-356独立客户端没有SSL/TLS的配置选项)
- 从活动WebSocket会话对象访问两个InetAddress端点信息
- 从活动WebSocket会话对象访问UpgradeRequest
- 更好地支持无状态端点
- 读取事件支持挂起/恢复逻辑,以允许应用程序进行一些基本的tcp背压/流量控制
- 基于过滤器或基于Servlet的配置(JSR-356方法要求在所有其他Servlet和过滤器处理之前进行升级)
希望这能有所帮助,如果你想了解更多细节,请使用jetty用户邮件列表,因为这种问题对stackoverflow来说真的不合适。