tcp ロングコネクションのパケット化には、1. メッセージ長を固定する方法、2. 特殊な文字列をメッセージ境界として使用する方法、3. 長さフィールドを追加する方法、4. の 4 つの方法があります。メッセージ自体のフォーマットを使用して再委託する方法。
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 サイトの他の関連記事を参照してください。