如何有效地定义基于 XML 的文本协议的传输结束?

2024-03-15

我想开发一个基于XML并通过TCP/IP套接字传输的文本协议。 假设我有一个简单的请求/响应机制,可以通过持久化发送 客户端和服务器之间的 TCP/IP 连接如下:

<?xml version="1.0" encoding="UTF-8"?>
<request id="1" command="get.answer">
    <value type="string">Answer to the Ultimate Question of Life, the Universe, and Everything</value>
</request>

<?xml version="1.0" encoding="UTF-8"?>
<response id="1" command="get.answer">
    <value type="int32">42</value>
</response>

各方应何时开始处理传入数据,或者换句话说 服务器什么时候知道传入的客户端数据已完全传输 并可以处理以创建响应?

当然,我对此主题做了一些研究: 我发现this https://stackoverflow.com/questions/6593969/simple-chat-protocol/6594192#6594192根据 HTTP 示例,答案指向正确的方向: 因此,在 XML 消息之上使用一种“传输协议”肯定会有所帮助。

但我也研究了纯粹基于 XML 的 XMPP 协议,它不使用任何 至少据我所知,“传输协议”类似于 HTTP。

RFC 6120 的“2.4. 结构化数据”中写道:

XMPP 中的基本协议数据单元不是 XML 流( 只是提供点对点通信的传输)但是 XML“节”,本质上是发送的 XML 片段 越过一条小溪。节的根元素包括路由 属性(例如“发件人”和“收件人”地址)和子项 该节的元素包含用于传递到预期目标的有效负载 接受者。

因此,他们通过 TCP/IP 发送基本上小的 XML 块,无需“传输协议”,并且从 我的wireshark跟踪我可以看到也没有特殊的传输结束字符 在每个 XML 节的末尾,例如两次 \r\n 或类似的内容。 那么他们如何知道消息(节)的结束呢?


实际上,XMPP 使用XML流 http://www.ietf.org/rfc/rfc3920.txt传输数据。您所指的数据单元是各个消息的实际交换,但它们都包含在定义 XMPP 会话通信的起点和终点的 XML 流中。

这将是传输结束发生的地方,就像所有传输结束一样。在该流中,有 3 种定义的数据包类型(IQ、消息和存在),它们指示各个消息(用于客户端到服务器通信)的开始和结束。

尽管基本情况是通过 TCP 连接完成的,但也有支持不同有线协议的扩展,例如HTTP http://xmpp.org/extensions/xep-0124.html这对于允许 XMPP 通过防火墙很有用。

如果您想做类似的事情,那么您可以遵循相同的方法,即在建立和断开连接时启动和结束 XML 流。然后,您只需定义各个消息类型,以便您的端点知道什么构成完整的消息。

或者您可以使用 XMPP,它似乎非常适合您的用例。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何有效地定义基于 XML 的文本协议的传输结束? 的相关文章

  • Linq to XML - 更新/更改 XML 文档的节点

    我有 2 个问题 1 我已经开始使用 Linq to XML 我想知道是否可以通过 Linq 更改 XML 文档 我的意思是 有没有类似的东西 XDocument xmlDoc XDocument Load sample xml updat
  • 使用 LinearLayout 将按钮放在屏幕底部?

    我有以下代码 如何使 3 个按钮位于底部
  • 通过 XSL 查看 XML 到 XHTML 转换中的源代码

    我正在尝试使用 XSL 文件将 XML 文件转换为 XHTML 文件 如何查看转换后输出的XHTML源代码 我目前正在通过 Firefox 查看结果 但我看到的只是 XHTML 文件的渲染版本 我想查看源代码 但是当我转到 查看 gt 页面
  • 使用套接字和 AsyncTask 强制关闭

    堆栈的人们大家好 请参阅下面我的班级代码和我的 LogCat 尝试连接时我受到强力关闭 如果有人能帮助我找出原因 我将不胜感激 基本上代码的作用是 从意图中获取 IP 地址 连接到端口 32 的 IP 然后发送一个命令 等待响应并发送另一个
  • 使用ASP/VB获取节点属性值

    我有以下 XML 架构
  • 如何使用 ejabberd 进行视频通话?

    如何使用ejabberd进行视频通话 如msn和skype ejabberd 本身不处理音频 视频 音频和视频通过 Jingle XEP 0166 进行处理 这是客户端到客户端的 如果您想发出音频或视频呼叫 您应该确保两个客户端都通过正常的
  • 当responseText包含有效的Xml时,IXMLHttpRequest.responseXml为空,没有解析错误

    我正在从中获取一些 XML政府网站 http www bankofcanada ca stats assets rates rss noon en all xml http www bankofcanada ca stats assets
  • XSD 嵌套元素

  • 对卡在 CLOSE_WAIT 状态的连接进行故障排除

    我有一个在 Windows 上的 WebLogic 11g 中运行的 Java 应用程序 几天后它变得没有响应 我注意到的一个可疑症状是大量连接 大约 3000 个 出现在netstat即使服务器空闲 也具有 CLOSE WAIT 状态 由
  • XML 解析:格式良好的检查:未声明的实体

    我正在使用 SSMS 2008 但收到以下错误 你知道这意味着什么吗 Msg 9448 Level 16 State 1 Line 4 XML parsing line 1 character 89 well formed check un
  • 不使用 local-name() 或 name() 函数的 XPath

    我必须解析oprResult code使用 XPath 从下面的 XML 中获取 XPath 表达式 local name oprResult code 正在按预期工作 但是 我无法使用name or local name功能为 在我的解析
  • 使用 C# 将 XML 转换为 BSON

    我想将 XML 文件转换为 BSON 然后将 BSON 导入 MongoDB 我进行了搜索 但找不到如何使用 C 来隐藏它 请向我提供使用 C 执行此操作的源代码 今天有同样的问题 这肯定不是最好的解决方案 但是 我在我的项目中以这种方式解
  • EOutOfMemory 使用 Delphi 创建大型 XML

    我正在使用 Delphi 从关系数据库中的数据创建 XML 文档 它在小数据集上测试得很好 但是当我尝试将数据集的大小扩展到生产级别时 它最终在节点创建期间因 EOutOfMemory 异常而崩溃 我正在使用放在表单上的 TXMLDocum
  • 为什么这些冲突出现在以下 XML 的 yacc 语法中

    我有以下 XML 语法 效果很好 program lt ID attribute list gt root root lt ID attribute list gt node list lt ID gt node list node s n
  • XML 渲染错误 Android 预览 N

    更新后我已将 android SDK 更新为 android Preview N 但收到此 xml 渲染错误 单击详细信息后 它显示以下堆栈跟踪如何避免这种情况 org jetbrains android uipreview Renderi
  • strings.xml 中的 Android 变量

    我在某处读到如何在 XML 文档中使用变量 他们说这很简单 我想也是如此 我在 Android strings xml 文件中成功地使用了它 我一整天都这样使用它 直到突然 android 停止解析它并停止将它视为变量 我这样使用它
  • SQL Server 2008R2 和创建 XML 文档

    论坛上的第一篇文章 因为我真的被这个问题困住了 以下查询正确地将有效的 XML 文档分配给 xTempXML 变量 类型为 xml 注 文档的长度 转换为varchar max 711 select xTempXML select Pres
  • 通过 SO_RCVTIMEO 套接字选项在 Ruby 中设置套接字超时

    我试图通过 SO RCVTIMEO 套接字选项在 Ruby 中设置套接字超时 但它似乎对任何最近的 nix 操作系统都没有影响 使用 Ruby 的 Timeout 模块不是一个选择 因为它需要为每个超时生成和连接线程 这可能会变得昂贵 在需
  • Python - 如何确定解析的 XML 元素的层次结构级别?

    我正在尝试使用 Python 解析 XML 文件中具有特定标记的元素并生成输出 excel 文档 该文档将包含元素并保留其层次结构 我的问题是我无法弄清楚每个元素 解析器在其上迭代 的嵌套深度 XML 示例摘录 3 个元素 它们可以任意嵌套
  • 将 MQTTNet 服务器与 MQTT.js 客户端结合使用

    我已经启动了一个 MQTT 服务器 就像this https github com chkr1011 MQTTnet tree master例子 该代码托管在 ASP Net Core 2 0 应用程序中 但我尝试过控制台应用程序 但没有成

随机推荐