STOMP 或 XMPP - 通过 websocket

2024-01-08

我正在开发一个涉及实时聊天(消息传递,包括群聊)的项目。

我以前使用过 websockets,所以我开始使用 spring-websockets 来研究这个问题,并且我阅读了一些关于实现它的最佳方法的文章。然后我遇到了 STOMP(作为 websockets 的子协议),并且由于 Spring 直接支持 STOMP,所以很容易实现我应该做的事情。

但我的疑问是,据我了解 STOMP 和 XMPP 是相似的协议(消息传递协议),但我找不到任何问题/博客来解释这些差异以及为什么有人会更喜欢其中一个?

如果有人解释这两种协议有何不同,那将会非常有帮助?

谢谢。


作为 Jabber 的继承者,XMPP 更专注于即时消息而不是 STOMP。 XMPP 是一个可扩展的协议,可以用于其他目的,但有大量关于 IM 的内置机制和实现。 STOMP 提供了更通用的机制,这里的“消息”指的是广泛的含义。

假设您为您的项目选择 STOMP。然后,您可能需要为 XMPP 已经提供的某些场景(点对点、群聊)定义基本消息。

比较两个协议;

  • STOMP 消息以纯文本形式传送(如其名称所示),而 XMPP 则以 XML 结构。
  • STOMP 连接可以通过 TCP 或 WebSocket 建立。 XMPP 支持 TCP 或 HTTP(WebSocket 标准也是提议的 https://www.rfc-editor.org/rfc/rfc7395).
  • 在Java世界里,Spring https://spring.io/guides/gs/messaging-stomp-websocket/具有说话STOMP的能力并且非常容易实现。但是,可以通过添加第 3 方 API(即Smack https://www.igniterealtime.org/projects/smack/)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STOMP 或 XMPP - 通过 websocket 的相关文章

随机推荐

  • 具有不同参数的重载方法的方法引用无效

    当尝试编译表达式时Comparator comparing String toLowerCase Java 编译器返回错误 请参阅以下问题以获取更多信息 为什么 Comparator comparing 不适用于 String toLowe
  • 无法解析基于模板的标识符“get”。网豆8.1

    我的问题是 我收到了帖子主题中出现的警告 真是令人沮丧 这自动完成不适用于该代码 除此之外还会出现警告 标准设定为C 14 例如 Boxes 2 get gt setPosition Boxes 2 get gt getPosition v
  • 正则表达式仅使用egrep捕获整个单词

    我正在使用egrep 来查看perforce NAS 中的脚本 我试图找到我们使用 RCP 和 RSH 的地方 我遇到的问题是 1 我在 REGEX 上很糟糕 2 我正在捡起我不感兴趣的垃圾 例如 如果一个文件包含单词 strcpy 它会捡
  • 错误1001。初始化安装时发生异常

    我在尝试卸载时看到以下错误 程序文件中没有WRT文件夹 如何卸载该软件 注意 我已从程序文件中删除了软件文件夹 错误信息 System IO FileNotFoundException could not load file or asse
  • 如何检查 Java 8 Streams 中是否存在重复项?

    在 java 8 中 检查列表是否包含重复项的最佳方法是什么 我的想法是这样的 list size list stream distinct count 这是最好的方法吗 您的代码需要迭代所有元素 如果你想确保没有重复的简单方法 例如 pu
  • 如何为 HTML div 标签设置边框

    我正在尝试在 HTML 中定义 div 标签周围的边框 在某些浏览器中 边框不会出现 这是我的 HTML 代码 div style border thin div
  • 计算嵌套对象中的键数

    我正在尝试统计嵌套 JS 对象中的键 我能够到达第一层 但我有点困惑如何让它深入嵌套对象并返回计数 var properties prop1 prop2 prop3 prop4 subProp1 subProp2 subProp3 subS
  • 设置 eclipse java SE-1.7

    我想开始学习java 但是Eclipse给我带来了一些麻烦 首先 我是一个Java初学者 对它知之甚少甚至一无所知 我想使用 JavaSe 1 7 除了使用最新版本之外 我没有明确的理由使用它 下载 Eclipse 适用于 Java 开发人
  • 为什么非成员 static constexpr 变量不是隐式内联的?

    在 C 17 中 我们得到了内联变量 并且我假设全局 constexpr 变量是隐式内联的 但显然这只适用于静态member变量 这背后的逻辑 技术限制是什么 source 声明为 constexpr 的静态成员变量 但不是名称空间范围变量
  • 当底层模型更改时,QT QmlMap PolyLine 未正确更新

    我正在尝试将多个地理坐标与地图中的折线连接起来 坐标存储在模型 QAbstractListModel 类中 我可以在其中修改 删除和添加 C 中的坐标 简单地显示每个坐标的标记就可以了 但是当我将它们与折线连接并从模型中删除一些现有坐标时
  • 将 Base64 字符串加载到画布时遇到问题

    我正在尝试将 Base64 字符串从数据库加载到画布 我通过执行相反的方法获得了这个字符串 在画布上绘制后将其保存到我的数据库中 所以 现在我想将其加载回另一个画布上 我已经尝试过在网络和 StackOverflow 上其他地方找到的这段代
  • 尝试使用 getRange 时出现类型错误

    NOTE This is a proposal of canonical Q A Please discuss it on Meta https meta stackoverflow com q 420764 1595451 作为新的 Go
  • 使用数据框架构的 Spark 地图数据框

    我有一个从 JSON 对象创建的数据框 我可以查询这个数据框并将其写入镶木地板 由于我推断了架构 因此我不一定知道数据框中的内容 有没有办法使用自己的架构来输出列名称或映射数据框 The results of SQL queries are
  • 如何检测浏览器何时在 Web 登录中输入存储的密码

    我有一个网站 可以检测何时输入用户名和密码 然后启用登录按钮 问题是 如果浏览器输入它记住的用户名和密码 则登录按钮永远不会启用 JavaScript 有没有办法检测浏览器输入此信息 你可以用以下方式进行轮询setInterval 但是为什
  • 如何将 Invoke-RestMethod 的响应转换为 XML?

    参考help https learn microsoft com en us powershell module microsoft powershell utility invoke restmethod view powershell
  • 将 URL 参数传递到 HTML 表单 Google Web App

    我已经浏览了大部分与此相关的问题 但没有找到对我有帮助的解决方案 我已经一一应用了它们 我有一个 HTML 表单 我正在通过 google 将其发布为网络应用程序 我需要用该参数预先填充输入框 code gs function doGet
  • 为什么 March=native 会破坏我的程序?

    我正在编译程序 include
  • 如何让liveserver渲染django模板?

    我一直在搞一个教程网站 我发现当我尝试打开 Django 模板时 我的 VS Code LiveServer 插件无法正常工作 我应用的 CSS 丢失了 尽管一切都在我的本地开发服务器中正确呈现 并且模板语言代码实际上被打印到屏幕上而不是被
  • 如何创建/管理作业队列[重复]

    这个问题在这里已经有答案了 我有一个有序列表中包含数千个 shell 作业的队列 我需要从上到下并行运行 4 个作业以避免 CPU 饱和 如果我只是将作业列表拆分为 4 个批处理脚本 则运行时不会对齐 其中一个脚本将远远领先于其他脚本 但仍
  • STOMP 或 XMPP - 通过 websocket

    我正在开发一个涉及实时聊天 消息传递 包括群聊 的项目 我以前使用过 websockets 所以我开始使用 spring websockets 来研究这个问题 并且我阅读了一些关于实现它的最佳方法的文章 然后我遇到了 STOMP 作为 we