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メッセージの上に一種の「転送プロトコル」を使用すると確かに役立ちます。
しかし、少なくとも私が見た限りでは、HTTPのような「転送プロトコル」を使用しない純粋なXMLベースのXMPPプロトコルも調べました。
「2.4。構造化データ」のRFC6120から、次のようになっています。
XMPPの基本的なプロトコルデータユニットは、XMLストリーム(ポイントツーポイント通信のトランスポートを提供するだけです)ではなく、ストリームを介して送信されるXMLのフラグメントであるXML「スタンザ」です。スタンザのルート要素にはルーティング属性(「from」アドレスや「to」アドレスなど)が含まれ、スタンザの子要素には目的の受信者に配信するためのペイロードが含まれます。
したがって、基本的に小さなXMLチャンクを「転送プロトコル」なしでTCP / IP経由で送信し、wiresharkトレースから、各XMLスタンザの最後に2回のような特別な送信終了文字がないことがわかります\ r \nまたはそのようなもの。では、メッセージの終わり(スタンザ)をどうやって知るのでしょうか?