Rumah > pembangunan bahagian belakang > tutorial php > Kongsi contoh melekat/membongkar paket php tcp

Kongsi contoh melekat/membongkar paket php tcp

藏色散人
Lepaskan: 2023-04-11 09:00:01
ke hadapan
6530 orang telah melayarinya

Artikel ini akan memperkenalkan anda kepada contoh tentang paket tcp PHP melekat/membongkar saya harap ia akan membantu rakan yang memerlukan~

Kongsi contoh melekat/membongkar paket php tcp

Dalam mod pautan panjang tcp. , Gunakan kaedah panjang pengepala mesej tetap untuk membongkar mesej untuk menyelesaikan masalah melekit. Protokol pengepala mesej tetap

membetulkan N bait pertama pengepala mesej sebagai bit panjang mesej Bergantung pada senario perniagaan, 2bait atau 4bait, apabila membaca mesej, mula-mula baca bit panjang mesej, dan kemudian. mengikut mesej tertentu Panjangnya membaca kandungan mesej. [Pembelajaran yang disyorkan: Tutorial video PHP]

bungkus/buka bungkusan boleh membungkus nilai ke dalam binari/membuka binari ke dalam nilai Untuk mod tertentu, sila rujuk pada pek/buka bungkusan untuk penggunaan terperinci. Di sini kita memilih tetap Panjang pengepala ialah 2 bait untuk mewakili panjang badan mesej Panjang maksimum badan mesej boleh diwakili oleh 2^16 - 1. Jika tidak mencukupi, anda boleh menggunakan 4 bait.

Kumpulkan pakej

<?php
// msg protocol
// | ---- dataLen ---- | data |
// | - fixed 2bytes - |

// 模拟客户端连续发送2条消息
$foo = "hello world";
$bar = "i am sqrt_cat";

$package = "";

// 使用 n 打包 固定2bytes
$fooLenn = pack("n", strlen($foo));
$package = $fooLenn . $foo;

$barLenn = pack("n", strlen($bar));
$package .= $barLenn . $bar;
Salin selepas log masuk

Patuhi pakej

// send
// 传输 $package 由 $foo $bar 两条消息组成 模拟粘包场景
// receive
Salin selepas log masuk

Buka bungkus

<?php
// 解析第1条消息 取前 2bytes 按 n 解包
$fooLen = unpack("n", substr($package, 0, 2))[1];
// 使用包消息体长度定义读取消息体
// 从第 3byte 开始读 前 2bytes表示长度
$foo = substr($package, 2, $fooLen);
echo $foo . PHP_EOL;

// 解析第2条消息 取前 2bytes 按 n 解包
// 0 ~ (2 + fooLen) - 1 字节序为 fooLen . foo
// (2 + fooLen) ~ (2 + fooLen) + 2 - 1 为 barLen
$barLen = unpack("n", substr($package, (2 + $fooLen), 2))[1];
$bar    = substr($package, (2 + $fooLen) + 2, $barLen);
echo $bar . PHP_EOL;
Salin selepas log masuk

Senario tcp yang sering ditemui dalam kerja harian mungkin mod mesej tunggal sambungan pendek Pelanggan menutup sambungan selepas menghantar mesej, dan pelayan membaca EOF dalam gelung untuk mendapatkan mesej yang lengkap. Walau bagaimanapun, jika terdapat berbilang mesej dalam sambungan pendek atau dalam mod pautan panjang, paket melekit mungkin berlaku dan pelanggan tidak boleh mengesahkan bahawa mesej telah dibaca melalui EOL tanpa menutup pelayan. Ini memerlukan penentuan protokol dan pembongkaran.

Atas ialah kandungan terperinci Kongsi contoh melekat/membongkar paket php tcp. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
php
sumber:learnku.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan