ホームページ >よくある問題 >tcp の長い接続を下請けする方法は何通りありますか?

tcp の長い接続を下請けする方法は何通りありますか?

coldplay.xixi
coldplay.xixiオリジナル
2020-06-28 13:20:263341ブラウズ

tcp ロングコネクションのパケット化には、1. メッセージ長を固定する方法、2. 特殊な文字列をメッセージ境界として使用する方法、3. 長さフィールドを追加する方法、4. の 4 つの方法があります。メッセージ自体のフォーマットを使用して再委託する方法。

tcp の長い接続を下請けする方法は何通りありますか?

TCP ロング接続パケット化の 4 つの方法:
1. 固定メッセージ長
2. メッセージとして特殊な文字列を使用する境界線。たとえば、http プロトコルのヘッダーでは、フィールド区切り文字 3 として "\r\n"
が使用されます。各メッセージのヘッダーに長さフィールドを追加します。これは最も一般的な
4. メッセージ自体の形式を使用してサブパッケージ化します。たとえば、XML 内の 4216313e5055da45c6d0ded129c5d644c02ae4fdd442eb2210bebb17feeb95b4 のペアリングなど。

関連する学習の推奨事項: PHP 初心者からマスターまでプログラミング

パケット化のためにヘッダーにメッセージ長フィールドを追加する方法について説明します
各メッセージのヘッダーが 4 バイトである場合、文字列長を格納します。たとえば、メッセージ「hello」の場合、バイト ストリームは 0x00,0x00,0x00,0x05,'h ',' e','l','l','o'
下請けを示す疑似コードを作成します:

void OnMessage()
{    while(接收缓冲buf可读字节>=头部长度4)
    {
        len = 包的长度        if(len>65536 or len<0)
        {
            关闭连接
        }        else if(buf>=len+4)
        {
            从buf中提取出4字节;
            message=将buf后的len长度内存赋给message
            messagecallback(message)调用用户代码处理message
            从buf中移除len长度
        }        else
        {
            不够一个包的长度,等待下次消息到来,break;
        }
    }
}

以上がtcp の長い接続を下請けする方法は何通りありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。