我想开发一个基于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(使用前将#替换为@)