Rumah > Artikel > rangka kerja php > Pembangunan pekerja: Bagaimana untuk melaksanakan pelayan WebSocket
Cara menggunakan Workerman untuk melaksanakan pelayan WebSocket
Dengan peningkatan populariti teknologi WebRTC, komunikasi masa nyata permainan, sembang dalam talian dan lain-lain aplikasi, teknologi WebSocket juga menjadi semakin penting. Workerman ialah rangka kerja rangkaian TCP, UDP, dan Unix Socket tak segerak berprestasi tinggi yang berjalan dalam persekitaran PHP Ia sememangnya menyokong konkurensi tinggi dan sangat sesuai untuk membangunkan pelayan WebSocket.
Artikel ini akan memperkenalkan secara terperinci cara menggunakan Workerman untuk melaksanakan pelayan WebSocket, termasuk cara mengendalikan sambungan WebSocket, cara menghantar dan menerima mesej WebSocket, dan cara menyepadukan rangka kerja dengan perpustakaan lain. Kod sampel lengkap juga disediakan di penghujung artikel.
Sebelum anda mula menggunakan Workerman, anda perlu memasangnya terlebih dahulu. Ia boleh dipasang melalui Komposer, atau anda boleh memuat turun kod sumber terus dari GitHub dan memasangnya secara manual. Di sini kami mengambil pemasangan Komposer sebagai contoh:
composer require workerman/workerman
Sebelum menggunakan Workerman untuk melaksanakan pelayan WebSocket, anda perlu memahami prinsip kerja WebSocket. WebSocket ialah protokol sambungan jangka panjang dupleks penuh Pelanggan dan pelayan membuat sambungan melalui jabat tangan, dan kemudian boleh menghantar mesej kepada satu sama lain. Mesej WebSocket boleh menjadi sebarang data seperti teks, perduaan atau fail, dan pelayan boleh memprosesnya secara berbeza bergantung pada jenis mesej.
Melaksanakan pelayan WebSocket menggunakan Workerman adalah sangat mudah dan hanya memerlukan beberapa baris kod untuk diselesaikan. Berikut ialah contoh:
require_once __DIR__ . '/vendor/autoload.php'; use WorkermanWorker; // 创建一个Worker监听8090端口,使用websocket协议通讯 $wsWorker = new Worker("websocket://0.0.0.0:8090"); // 启动4个进程对外提供服务 $wsWorker->count = 4; // 处理WebSocket连接的回调函数 $wsWorker->onConnect = function($connection) { echo "New connection "; }; // 处理WebSocket消息的回调函数 $wsWorker->onMessage = function($connection, $data) { // 处理消息... }; // 启动Worker Worker::runAll();
Pertama, kami mencipta tika Pekerja dan menentukannya untuk mendengar pada port 8090 dan berkomunikasi menggunakan protokol websocket. Kemudian sediakan 4 proses untuk mula mengendalikan sejumlah besar sambungan serentak. Pekerja menyokong berbilang protokol penghantaran seperti TCP, UDP dan Unix Socket, jadi kita perlu menentukan protokol WebSocket.
Dalam contoh ini, kami hanya mentakrifkan dua fungsi panggil balik:
Melalui fungsi panggil balik onMessage, kami boleh menerima mesej WebSocket yang dihantar oleh pelanggan, dan format data boleh berupa teks atau binari. Cara memproses mesej WebSocket bergantung pada senario aplikasi Contohnya, aplikasi sembang dalam talian mungkin perlu melaksanakan fungsi seperti penyiaran dan sembang titik ke titik, manakala aplikasi permainan perlu melaksanakan komunikasi masa nyata peringkat mikrosaat.
Berikut ialah contoh mudah yang mencetak mesej yang diterima dan membalas kepada pelanggan:
$wsWorker->onMessage = function($connection, $data) { echo "Received message: {$data} "; $connection->send("Received: {$data}"); };
Status sambungan WebSocket
Selepas WebSocket sambungan diwujudkan, sambungan antara klien dan pelayan tetap terbuka. Melalui fungsi panggil balik onClose, kami boleh mengendalikan peristiwa terputus sambungan:
$wsWorker->onClose = function($connection) { echo "Connection closed "; };
Workerman boleh disepadukan dengan mudah dengan rangka kerja lain. Di sini kami mengambil rangka kerja Laravel sebagai contoh untuk memperkenalkan cara menggunakan Workerman untuk melaksanakan pelayan WebSocket dalam Laravel.
Pertama, kita perlu memasang Workerman dalam projek Laravel:
composer require workerman/workerman
Seterusnya, kita boleh mencipta arahan Artisan tersuai untuk memulakan pelayan WebSocket:
php artisan make:command WebSocketServer# 🎜🎜#Kemudian tulis kod dalam fail app/Console/Commands/WebSocketServer.php:
<?php namespace AppConsoleCommands; use IlluminateConsoleCommand; use WorkermanWorker; class WebSocketServer extends Command { // 命令名称 protected $name = 'websocket:server'; // 命令描述 protected $description = 'Start WebSocket server'; // 执行命令 public function handle() { // 创建Worker实例,监听8080端口 $wsWorker = new Worker("websocket://0.0.0.0:8080"); // 进程数量 $wsWorker->count = 4; // 处理连接事件 $wsWorker->onConnect = function($connection) { echo "New connection "; }; // 处理消息事件 $wsWorker->onMessage = function($connection, $data) { // 处理消息 }; // 运行Worker Worker::runAll(); } }Akhir sekali, kita boleh memulakan pelayan WebSocket melalui arahan berikut:
rreee#🎜🎜 #Ya Lihat, melaksanakan pelayan WebSocket menggunakan Workerman adalah sangat mudah dan boleh disepadukan dengan mudah ke dalam rangka kerja lain.
Contoh kod penuhphp artisan websocket:server
Di atas adalah semua kandungan menggunakan Workerman untuk melaksanakan pelayan WebSocket Melalui pengenalan artikel ini, saya percaya bahawa pembaca telah menguasai pengetahuan teknikal yang berkaitan. dan pada masa yang sama Anda boleh menggunakan teknik ini dalam projek sebenar untuk pembangunan.
Atas ialah kandungan terperinci Pembangunan pekerja: Bagaimana untuk melaksanakan pelayan WebSocket. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!