Melaksanakan siaran Websocket menggunakan ThinkPHP6
Jun 20, 2023 am 08:41 AMDengan pembangunan berterusan aplikasi web moden, komunikasi masa nyata telah menjadi salah satu fungsi yang diperlukan. Teknologi WebSocket ialah salah satu kaedah komunikasi masa nyata yang paling popular, yang boleh mewujudkan sambungan dua hala yang berterusan antara pelayan dan pelanggan untuk mencapai komunikasi masa nyata.
ThinkPHP ialah rangka kerja PHP yang sangat popular ThinkPHP 6 disertakan dengan pakej sambungan Swoole, menjadikannya sangat mudah untuk menggunakan teknologi WebSocket. Artikel ini akan memperkenalkan cara menggunakan rangka kerja ThinkPHP 6 untuk melaksanakan fungsi siaran WebSocket.
Keperluan alam sekitar
Sebelum bermula, anda perlu menyediakan persekitaran berikut:
- PHP 7.2+
- Sambungan Swoole
- Komposer
- Pengetahuan Pembangunan Web Asas
Buat Projek
Pertama, kita perlu mencipta projek baharu:
rreeeKemudian, untuk memudahkan daripada menggunakan WebSocket, kita perlu menambah sambungan Swoole dalam fail composer.json
projek:
composer create-project topthink/think my-project
Selepas selesai, jalankan arahan berikut untuk memasang:
"require": { "topthink/think-swoole": "^2.0", "swoole/swoole": "^4.7" }
Buat pengawal
Seterusnya, kita perlu mencipta pengawal untuk mengendalikan permintaan WebSocket. Cipta fail bernama app/controller
dalam direktori Websocket.php
dan tulis kod berikut:
composer install
Dalam kod di atas, kami mewarisi kelas thinkswooleWebsocket
dan menulis semula tiga daripadanya Kaedah:
- digunakan untuk memantau peristiwa sambungan; kaedah
onOpen
- digunakan untuk memantau peristiwa menerima mesej; .
onMessage
- Pada masa ini, kaedah ini tidak melakukan apa-apa Seterusnya, kami akan menambah logik komunikasi WebSocket kepada kaedah ini.
onClose
Daftar laluan
Selepas pengawal dibuat, kita perlu mendaftarkannya dalam laluan. Tambahkan kandungan berikut dalam fail
:<?php
declare(strict_types=1);
namespace appcontroller;
use thinkswooleWebsocket as SwooleWebsocket;
use SwooleWebSocketFrame;
class Websocket extends SwooleWebsocket
{
/**
* 監(jiān)聽連接事件
* @param SwooleWebSocketServer $server
* @param SwooleHttpRequest $request
*/
public function onOpen($server, $request)
{
}
/**
* 監(jiān)聽接收消息事件
* @param SwooleWebSocketServer $server
* @param Frame $frame
*/
public function onMessage($server, Frame $frame)
{
}
/**
* 監(jiān)聽關(guān)閉事件
* @param SwooleWebSocketServer $server
* @param int $fd
*/
public function onClose($server, $fd)
{
}
}
Kaedah digunakan di sini untuk mendaftarkan laluan. Kaedah permintaan laluan ini ialah app/route.php
, laluannya ialah
pengawal Route::post
. POST
/ws
Menulis logik komunikasi WebSocketWebsocket
onMessage
Kini, kami telah menyelesaikan penciptaan dan pendaftaran laluan dan pengawal WebSocket. Seterusnya, kita perlu menambah logik untuk komunikasi WebSocket dalam pengawal. Kami akan menggunakan pelayan WebSocket Swoole untuk melaksanakan komunikasi WebSocket.
Dalam kaedah
, kita boleh mendapatkan objek sambungan pelanggan dan menyimpannya untuk kegunaan seterusnya. Dalam kaedah, kita boleh mendapatkan mesej yang dihantar oleh pelanggan dan menyiarkan mesej ini kepada pelanggan lain. Dalam kaedah
, kita perlu mengalih keluar klien daripada kumpulan sambungan.onOpen
Buat fail bernama onMessage
dalam direktori onClose
dan tulis kod berikut:
use thinkacadeRoute; Route::post('/ws', 'Websocket@onMessage')->middleware( hinkmiddlewareAllowCrossDomain::class);
Konfigurasikan perkhidmatan WebSocket app/controller
WebSocketServer.php
Tulis kod perkhidmatan WebSocket Sebelum ini, kami memerlukan untuk mencipta fail konfigurasi bernama
dan tulis kandungan berikut:
<?php declare(strict_types=1); namespace appcontroller; use SwooleHttpResponse; use SwooleWebSocketFrame; use SwooleWebSocketServer; use thinkswoolewebsocketHandlerInterface; class WebSocketServer implements HandlerInterface { /** * @var array $connections */ private $connections = []; /** * 監(jiān)聽連接事件 * @param Server $server * @param SwooleHttpRequest $request */ public function onOpen(Server $server, SwooleHttpRequest $request): void { $this->connections[$request->fd] = $request->fd; echo "client-{$request->fd} is connected "; } /** * 監(jiān)聽消息事件 * @param Server $server * @param Frame $frame */ public function onMessage(Server $server, Frame $frame): void { foreach ($this->connections as $fd) { $info = $server->getClientInfo((int)$fd); if ($info && isset($info['websocket_status']) && $info['websocket_status'] == WEBSOCKET_STATUS_FRAME) { $server->push($fd, $frame->data); } else { unset($this->connections[$fd]); } } echo "received message from client-{$frame->fd}: {$frame->data} "; } /** * 監(jiān)聽關(guān)閉事件 * @param Server $server * @param int $fd * @param int $reactorId */ public function onClose(Server $server, int $fd, int $reactorId): void { unset($this->connections[$fd]); echo "client-{$fd} is closed "; } /** * @param Response $response */ public function onHandShake(Request $request, Response $response): bool { // Do nothing return true; } }
Dalam kod di atas, kami memberitahu aplikasi bagaimana untuk memulakan Swoole WebSocket melalui fail konfigurasi Serve. Kami memulakan jenis soket config
, mengikatnya pada swoole.php
dan mendayakan mod berbilang proses, menggunakan protokol TCP. Item konfigurasi
digunakan di sini untuk mengembalikan bilangan CPU sistem websocket
item konfigurasi menentukan kelas 0.0.0.0:9501
yang kami buat di atas. worker_num
swoole_cpu_num()
Jalankan perkhidmatan WebSocket handler
WebSocketServer
Selepas melengkapkan kod untuk mencipta dan mengkonfigurasi perkhidmatan WebSocket, kami perlu menjalankan kod untuk memulakan perkhidmatan WebSocket. Cuma laksanakan arahan berikut pada baris arahan:
return [ 'socket_type' => 'websocket', 'host' => '0.0.0.0', 'port' => 9501, 'mode' => SWOOLE_PROCESS, 'sock_type' => SWOOLE_SOCK_TCP, 'settings' => [ 'worker_num' => swoole_cpu_num(), ], 'handler' => ppcontrollerWebSocketServer::class, ];
Perkhidmatan Websocket telah dimulakan dan anda boleh mengujinya dengan mengakses aplikasi anda. Anda boleh menggunakan alamat ini:
. Buka berbilang tab dalam penyemak imbas untuk menguji sambungan WebSocket, fungsi penghantaran dan penerimaan mesej masing-masing. Ringkasanws://your-domain:9501/ws
Artikel ini memperkenalkan cara menggunakan rangka kerja ThinkPHP 6 untuk melaksanakan fungsi siaran WebSocket. Kami mencapai ini dengan mencipta pengawal, mendaftarkan laluan dan menulis logik komunikasi WebSocket, dan mengkonfigurasi perkhidmatan WebSocket. Contoh ini boleh digunakan sebagai amalan terbaik WebSocket yang mudah dan menyediakan rujukan untuk kami membangunkan fungsi WebSocket yang lebih maju.
Atas ialah kandungan terperinci Melaksanakan siaran Websocket menggunakan ThinkPHP6. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Untuk menjalankan projek ThinkPHP, anda perlu: memasang Komposer untuk mencipta projek, masukkan direktori projek dan laksanakan php bin/console serve;

ThinkPHP mempunyai berbilang versi yang direka untuk versi PHP yang berbeza. Versi utama termasuk 3.2, 5.0, 5.1 dan 6.0, manakala versi kecil digunakan untuk membetulkan pepijat dan menyediakan ciri baharu. Versi stabil terkini ialah ThinkPHP 6.0.16. Apabila memilih versi, pertimbangkan versi PHP, keperluan ciri dan sokongan komuniti. Adalah disyorkan untuk menggunakan versi stabil terkini untuk prestasi dan sokongan terbaik.

Langkah-langkah untuk menjalankan ThinkPHP Framework secara setempat: Muat turun dan nyahzip ThinkPHP Framework ke direktori tempatan. Buat hos maya (pilihan) yang menunjuk ke direktori akar ThinkPHP. Konfigurasikan parameter sambungan pangkalan data. Mulakan pelayan web. Mulakan aplikasi ThinkPHP. Akses URL aplikasi ThinkPHP dan jalankannya.

PHP dan WebSocket: Kaedah Amalan Terbaik untuk Pemindahan Data Masa Nyata Pengenalan: Dalam pembangunan aplikasi web, pemindahan data masa nyata merupakan keperluan teknikal yang sangat penting. Protokol HTTP tradisional ialah protokol model tindak balas permintaan dan tidak boleh mencapai penghantaran data masa nyata dengan berkesan. Untuk memenuhi keperluan penghantaran data masa nyata, protokol WebSocket telah wujud. WebSocket ialah protokol komunikasi dupleks penuh yang menyediakan cara untuk berkomunikasi dupleks penuh melalui sambungan TCP tunggal. Berbanding dengan H

Dengan perkembangan teknologi Internet yang berterusan, komunikasi masa nyata telah menjadi bahagian yang amat diperlukan dalam kehidupan seharian. Komunikasi masa nyata yang cekap, kependaman rendah boleh dicapai menggunakan teknologi WebSockets, dan PHP, sebagai salah satu bahasa pembangunan yang paling banyak digunakan dalam bidang Internet, juga menyediakan sokongan WebSocket yang sepadan. Artikel ini akan memperkenalkan cara menggunakan PHP dan WebSocket untuk mencapai komunikasi masa nyata, dan menyediakan contoh kod khusus. 1. Apakah itu WebSocket?

Cara menggunakan Java dan WebSocket untuk melaksanakan push sebut harga saham masa nyata Pengenalan: Dengan perkembangan pesat Internet, push sebut harga saham masa nyata telah menjadi salah satu tumpuan pelabur. Kaedah tolakan pasaran saham tradisional mempunyai masalah seperti kelewatan yang tinggi dan kelajuan penyegaran yang perlahan Bagi pelabur, ketidakupayaan untuk mendapatkan maklumat pasaran saham terkini tepat pada masanya boleh menyebabkan kesilapan dalam keputusan pelaburan. Tolakan sebut harga saham masa nyata berdasarkan Java dan WebSocket boleh menyelesaikan masalah ini dengan berkesan, membolehkan pelabur mendapatkan maklumat harga saham terkini secepat mungkin.

Perbandingan prestasi rangka kerja Laravel dan ThinkPHP: ThinkPHP umumnya berprestasi lebih baik daripada Laravel, memfokuskan pada pengoptimuman dan caching. Laravel berfungsi dengan baik, tetapi untuk aplikasi yang kompleks, ThinkPHP mungkin lebih sesuai.

Dalam artikel ini, kami akan membandingkan Acara Dihantar Pelayan (SSE) dan WebSockets, kedua-duanya adalah kaedah yang boleh dipercayai untuk menyampaikan data. Kami akan menganalisisnya dalam lapan aspek, termasuk arah komunikasi, protokol asas, keselamatan, kemudahan penggunaan, prestasi, struktur mesej, kemudahan penggunaan dan alat ujian. Perbandingan aspek-aspek ini diringkaskan seperti berikut: Kategori Peristiwa Dihantar Pelayan (SSE) WebSocket Arah Komunikasi Sehala Dwi-arah Protokol Pendasar HTTP WebSocket Protocol Keselamatan Sama seperti HTTP Kerentanan keselamatan sedia ada Kemudahan penggunaan Tetapan Tetapan mudah Prestasi kompleks Kelajuan penghantaran mesej pantas Dijejaskan oleh pemprosesan mesej dan pengurusan sambungan Struktur mesej Teks biasa atau binari Kemudahan penggunaan Tersedia secara meluas Berguna untuk penyepaduan WebSocket
