【问题标题】:Jetty WebSocket api vs the standard JSR 356 APIJetty WebSocket api 与标准 JSR 356 API
【发布时间】:2014-11-04 10:03:52
【问题描述】:

Jetty 9 支持 both 它自己的 Jetty Websocket API 以及标准 JSR 356 API,我认为这是历史原因(Jetty 的 API precedes final JSR 356)。

我查看了这两个 API 的基本文档以及一些示例。这两个 API 看起来都相当完整且相当相似。但是,我需要为我正在编写的新项目选择一个而不是另一个,并且我想避免使用将来可能会被弃用或功能不那么丰富的 API。

那么除了一个是标准化的这一明显事实之外,两者之间还有什么重要的区别吗?

【问题讨论】:

    标签: java websocket jetty jsr jetty-9


    【解决方案1】:

    这里是 Jetty 的实现者 :)

    Jetty WebSocket API 先出现,JSR-356 API 建立在它之上。

    JSR-356 API 做了一些 Jetty WebSocket API 不做的事情,比如

    • 用于自动 Bin/Text 到 Object 转换的解码器
    • 用于自动对象到 Bin/Text 转换的编码器
    • 路径参数处理(即自动 URI 模板到方法参数映射)

    但是,Jetty WebSocket API 可以做 JSR-356 API 不能做的事情。

    • 用于任意创建 WebSocket 端点的 WebSocketCreator 逻辑,可访问 HttpServletRequest
    • 更好地控制超时
    • 更精细的缓冲区/内存配置
    • 您可以管理 WebSocket 扩展
    • 支持基于 Reg-ex 的端点路径映射
    • 访问原始 Frame 事件
    • WebSocket 客户端支持 HTTP 代理(JSR-356 独立客户端没有代理配置选项)
    • WebSocket 客户端支持更好的超时连接逻辑
    • WebSocket 客户端支持 SSL/TLS(JSR-356 独立客户端没有 SSL/TLS 的配置选项)
    • 从活动的 WebSocket Session 对象访问两个 InetAddress 端点信息
    • 从活动 WebSocket 会话对象访问 UpgradeRequest
    • 更好地支持无状态端点
    • 读取事件支持挂起/恢复逻辑,以允许应用程序进行一些基本的 tcp 背压/流量控制
    • 基于过滤器或基于 Servlet 的配置(JSR-356 方法需要在所有其他 servlet 和过滤器处理之前进行升级)

    希望对您有所帮助,如果您想了解更多详情,请使用jetty-users mailing list,因为这类问题确实不适合stackoverflow。

    【讨论】:

    • 感谢您的出色回答。我确实注意到了其中一些差异(例如编码器/解码器和路径参数处理),但您的回答非常很有帮助。我也不确定我的问题在这里是否完全不合适,尽管我同意它在您的邮件列表中可能感觉更“在家”。毕竟,这个问题不是主观的,完全属于“软件开发特有的实用、可回答的问题”(stackoverflow.com/help/on-topic
    • 这篇文章已经有一段时间了,但如果你不介意我的问题 - 能够发送乒乓球有什么问题?
    猜你喜欢
    • 2017-07-20
    • 2015-05-26
    • 2014-10-12
    • 2013-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-23
    相关资源
    最近更新 更多