Dengan perkembangan pesat teknologi Internet dan komunikasi mudah alih, komunikasi masa nyata telah menarik lebih banyak perhatian. Komunikasi masa nyata boleh merealisasikan pemesejan segera antara pengguna, panggilan audio dan video dalam talian, pertempuran permainan dan fungsi lain, membawa lebih banyak kemungkinan kepada aplikasi Internet.
Artikel ini akan memperkenalkan cara menggunakan PHP dan Swoole untuk mencapai komunikasi masa nyata Bermula daripada aplikasi WebSocket yang mudah, kami akan memperkenalkan secara beransur-ansur pengetahuan asas pengaturcaraan Socket dan amalan aplikasi Swoole. Membaca artikel ini memerlukan pengetahuan asas tentang asas PHP dan pengaturcaraan rangkaian.
1. Asas WebSocket
WebSocket ialah protokol komunikasi dua hala berdasarkan protokol HTTP Ia menggunakan protokol yang dipanggil "jabat tangan" untuk membolehkan komunikasi dua hala. Kelebihan sambungan WebSocket ialah overhednya sangat kecil, komunikasi masa nyata sangat baik, dan komunikasi masa nyata dua hala boleh diwujudkan antara pelanggan dan pelayan.
Penubuhan WebSocket memerlukan langkah berikut:
1 Penyemak imbas memulakan permintaan jabat tangan WebSocket ke pelayan Tajuk permintaan mengandungi beberapa medan utama, seperti Naik Taraf, Sambungan, Sec-WebSocket-Key, dsb.
2 Pelayan memproses permintaan WebSocket pelanggan, dan jika ia memenuhi spesifikasi, mengembalikan mesej respons dengan medan seperti Naik Taraf, Sambungan dan Sec-WebSocket-Accept dalam pengepala respons.
3 Pelanggan menerima mesej respons daripada pelayan, menyemak medan Sec-WebSocket-Accept, dan mengesahkan bahawa jabat tangan WebSocket berjaya diwujudkan.
4 Kedua-dua pihak boleh memulakan komunikasi data dan boleh menghantar mesej teks, binari, Ping, Pong dan lain-lain.
Menggunakan WebSocket dalam PHP, kami boleh melaksanakannya melalui perkhidmatan WebSocket yang disediakan oleh Swoole. Berikut memperkenalkan aplikasi asas Swoole.
2. Asas Swoole
1. Pasang Swoole
Sebelum mula menggunakan Swoole, kita perlu memasang sambungan Swoole pada pelayan. Anda boleh memasangnya dengan arahan berikut:
pecl install swoole
atau pasang dari kod sumber:
$ wget https://github.com/swoole/swoole-src/archive/v4.3.3.tar. gz
$ tar zxvf v4.3.3.tar.gz
$ cd swoole-src-4.3.3
$ phpize
$ ./configure
$ make && make install --with-swoole
Mari kita laksanakan satu Perkhidmatan WebSocket mudah yang mendengar port 9501 dan menghantar mesej helo kepada pelanggan apabila pelanggan membuat sambungan dengan pelayan.
<?php $server = new SwooleWebSocketServer("0.0.0.0", 9501); $server->on('open', function (SwooleWebSocketServer $server, $request) { echo "new client connected "; $server->push($request->fd, "hello"); }); $server->on('message', function (SwooleWebSocketServer $server, $frame) { echo "received message: {$frame->data} "; }); $server->start();
Dalam kod ini, kami mencipta pelayan WebSocket baharu dan mendengar pada port 9501. Apabila pelanggan mewujudkan sambungan dengan pelayan, acara terbuka dicetuskan dan mesej helo dihantar kepada klien. Apabila pelanggan menghantar mesej kepada pelayan, peristiwa mesej dicetuskan, dan kita boleh menggunakan gema untuk mengeluarkan maklumat yang dihantar oleh klien.
Selepas memulakan kod di atas, kita boleh menggunakan pelayar atau klien WebSocket untuk menyambung ke pelayan:
let ws = new WebSocket('ws://127.0.0.1:9501'); ws.onopen = function(event) { console.log('WebSocket connected'); }; ws.onmessage = function(event) { console.log('Received:', event.data); }; ws.send('Hello, Server');
Selepas pelanggan berjaya menyambung, konsol akan mengeluarkan maklumat berikut:
WebSocket connected Received: hello
Menunjukkan bahawa pelanggan telah berjaya menerima mesej hello yang dihantar oleh pelayan.
3. Laksanakan aplikasi sembang masa nyata
Seterusnya, marilah kami melaksanakan aplikasi sembang masa nyata yang membolehkan berbilang pengguna berkomunikasi dalam masa nyata dalam bilik sembang. Ini memerlukan kami untuk terus mengembangkan pelayan WebSocket di atas untuk melaksanakan fungsi asas ruang sembang.
<?php $server = new SwooleWebSocketServer("0.0.0.0", 9501); $server->set([ 'worker_num' => 2, //启动2个Worker进程 ]); $server->on('open', function (SwooleWebSocketServer $server, $request) { echo "new client connected "; foreach($server->connections as $fd) { $server->push($fd, "{$request->fd} joined the room"); } }); $server->on('message', function (SwooleWebSocketServer $server, $frame) { foreach($server->connections as $fd) { if ($fd != $frame->fd) { $server->push($fd, "user {$frame->fd}: {$frame->data}"); } } }); $server->on('close', function ($server, $fd) { echo "client {$fd} closed "; foreach($server->connections as $fds) { $server->push($fds, "{$fd} quited the room"); } }); $server->start();
Dalam kod di atas, kami menambah pengendalian acara terbuka dan tutup. Apabila pengguna menyambung atau menutup sambungan, mesej untuk menyertai atau meninggalkan bilik sembang akan dihantar kepada pengguna lain yang disambungkan. Apabila pengguna menghantar mesej dalam bilik sembang, mesej itu disiarkan kepada pengguna dalam talian yang lain.
Selepas memulakan kod di atas, kami boleh menggunakan berbilang tetingkap pelayar untuk menyambung ke pelayan secara berasingan dan memasuki bilik sembang yang sama. Apabila pengguna menghantar mesej, pengguna lain boleh menerima mesej dalam masa nyata.
Artikel ini memperkenalkan cara menggunakan PHP dan Swoole untuk mencapai komunikasi masa nyata, daripada aplikasi WebSocket asas kepada aplikasi bilik sembang masa nyata. Swoole menyediakan kaedah pengaturcaraan tak segerak yang lebih fleksibel, menjadikannya lebih mudah untuk menulis aplikasi berprestasi tinggi, tinggi konkurensi dan kependaman rendah.
Atas ialah kandungan terperinci Tutorial lengkap tentang melaksanakan komunikasi masa nyata menggunakan PHP dan Swoole. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!