我想开发一个基于 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>
双方何时应该开始处理传入的数据,或者换句话说,服务器何时知道传入的客户端数据已完全传输并且可以处理以创建响应?
当然,我对该主题进行了一些研究:我发现这个答案基于 HTTP 示例指向了正确的方向:因此,在 XML 消息之上使用一种“传输协议”肯定会有所帮助。
但我还研究了纯粹基于 XML 的 XMPP 协议,至少据我所见,它不使用任何“传输协议”,如 HTTP。
从 RFC 6120 的“2.4。结构化数据”中读取:
XMPP 中的基本协议数据单元不是 XML 流(它只是提供点对点通信的传输),而是 XML“节”,它本质上是通过流发送的 XML 片段。节的根元素包括路由属性(例如“from”和“to”地址),而该节的子元素包含用于传递给预期接收者的有效负载。
所以他们基本上通过 TCP/IP 发送没有“传输协议”的小 XML 块,从我的 wireshark 跟踪中我可以看到,每个 XML 节的末尾也没有特殊的传输结束字符,比如两次 \r \n 或类似的东西。那么他们如何知道消息(节)的结尾呢?