Dengan pembangunan berterusan aplikasi Internet, pengaturcaraan rangkaian telah menjadi bidang penting dalam pembangunan perisian moden. Dalam bidang ini, prestasi konkurensi yang tinggi adalah sangat penting. Sebagai enjin komunikasi rangkaian tak segerak, berprestasi tinggi dan konkurensi tinggi, Swoole telah menjadi pilihan pertama banyak pembangun.
Artikel ini akan memperkenalkan cara menggunakan Swoole untuk melaksanakan pengaturcaraan rangkaian konkurensi tinggi dari aspek berikut:
Swoole ialah sumber terbuka, berprestasi tinggi, keperluan enjin komunikasi tidak segerak dengan mudah dan tidak segerak yang diperlukan oleh rangkaian komunikasi tidak segerak . Ia menyokong komunikasi melalui TCP, UDP, WebSocket dan protokol lain, dan mempunyai sokongan coroutine terbina dalam, menjadikannya mudah untuk melaksanakan pengaturcaraan rangkaian berkonkurensi tinggi dan berprestasi tinggi. Swoole menggunakan model dipacu peristiwa, boleh mengendalikan sambungan serentak dan mempunyai kebolehskalaan yang baik.
Pelayan TCP berasaskan SwooleSangat mudah untuk melaksanakan pelayan berdasarkan protokol TCP menggunakan Swoole. Berikut ialah contoh yang kemas:
<?php $server = new SwooleServer("127.0.0.1", 9501); $server->on('Connect', function ($server, $fd) { echo "Client: $fd Connected "; }); $server->on('Receive', function ($server, $fd, $tid, $data) { $server->send($fd, "Server: $data "); }); $server->on('Close', function ($server, $fd) { echo "Client: $fd Closed "; }); $server->start();
Kod di atas melaksanakan pelayan TCP yang mudah. Apabila pelanggan menyambung ke pelayan, pelayan akan mengeluarkan mesej kejayaan sambungan apabila pelanggan menghantar data ke pelayan, pelayan akan mengembalikan mesej itu utuh kepada pelanggan apabila pelanggan memutuskan sambungan dari pelayan, Pelayan akan mengeluarkan a mesej tertutup sambungan.
<?php $server = new SwooleServer("127.0.0.1", 9502, SWOOLE_PROCESS, SWOOLE_SOCK_UDP); $server->on('Packet', function ($server, $data, $client_info) { $server->sendto($client_info['address'], $client_info['port'], "Server: $data "); }); $server->start();
Contoh ini melaksanakan pelayan UDP yang mudah. Apabila pelanggan menghantar data ke pelayan, pelayan mengembalikan mesej utuh kepada klien.
Mod coroutine Swoole<?php go(function () { $client = new SwooleCoroutineClient(SWOOLE_SOCK_TCP); $client->connect('127.0.0.1', 9501); // 发送数据 $client->send("hello world "); // 接收数据 $data = $client->recv(); echo $data; // 关闭连接 $client->close(); });
Dalam kod di atas, kami menggunakan fungsi coroutine (go) untuk mencipta coroutine, dan kemudian menggunakan kelas pelanggan terbina dalam (CoroutineClient) daripada Swoole coroutine untuk mewujudkan sambungan TCP. Kita boleh menulis kod seperti panggilan segerak biasa, dan pada masa yang sama menikmati kelebihan prestasi tinggi dan pemprosesan serentak tinggi I/O tak segerak.
Mod berbilang benang Swoole<?php $server = new SwooleServer("127.0.0.1", 9503, SWOOLE_PROCESS, SWOOLE_SOCK_TCP); $server->set([ 'worker_num' => 2, ]); $server->on('Connect', function ($server, $fd) { echo "Client: $fd Connected "; }); $server->on('Receive', function ($server, $fd, $tid, $data) { $server->send($fd, "Server: $data "); }); $server->on('Close', function ($server, $fd) { echo "Client: $fd Closed "; }); $server->start();
Kod di atas menetapkan bilangan pekerja pada pelayan kepada 2 dan memulakan dua proses. Setiap proses mempunyai gelung peristiwa dan logik pemprosesan sendiri, yang boleh meningkatkan keupayaan serentak pelayan. .
Kerumitan pembangunan swole adalah lebih tinggi daripada kaedah tradisional dan anda perlu biasa dengan konsep seperti acara kompleks, panggil balik dan coroutine.
Atas ialah kandungan terperinci Cara menggunakan Swoole untuk melaksanakan pengaturcaraan rangkaian konkurensi tinggi. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!