Workerman ialah rangka kerja Soket PHP berprestasi tinggi, digunakan secara meluas dalam sembang masa nyata, tolak mesej dan senario lain. Dalam dokumentasi Workerman, kaedah pelaksanaan push mesej berbilang disediakan. Artikel ini akan memperkenalkan salah satu kaedah ini secara terperinci dan memberikan contoh kod khusus.
Pertama sekali, sebelum menggunakan Workerman untuk menolak mesej, anda perlu memasang dan mengkonfigurasi Workerman. Workerman boleh dipasang melalui Komposer, atau muat turun kod sumber terus dari GitHub. Untuk prosedur pemasangan dan konfigurasi terperinci, sila rujuk dokumentasi rasmi Workerman.
Terdapat dua cara utama untuk melaksanakan push mesej: menggunakan GatewayWorker, atau menggunakan baris gilir mesej dalam Workerman. Di sini kami memilih untuk menggunakan GatewayWorker untuk menolak mesej.
GatewayWorker ialah komponen sambungan yang dibangunkan berdasarkan Workerman dan digunakan terutamanya untuk memproses tolakan mesej protokol WebSocket. Melalui GatewayWorker, kami boleh melaksanakan fungsi seperti sembang masa nyata dan push mesej dengan mudah.
Pertama, kita perlu menentukan kelas Pekerja GatewayWorker untuk mengendalikan sambungan pelanggan dan menolak mesej. Contoh kod adalah seperti berikut:
use GatewayWorkerGateway; use WorkermanWorker; // 创建一个Worker监听2346端口,使用websocket协议通讯 $worker = new Worker('websocket://0.0.0.0:2346'); // 设置进程数量 $worker->count = 4; // 设置Worker名称 $worker->name = 'MessagePushWorker'; // 注册Gateway对象到Worker对象上 Gateway::$registerAddress = '127.0.0.1:1238'; $worker->onWorkerStart = function ($worker) { Gateway::registerGame($worker); }; // 客户端连接时触发 $worker->onConnect = function ($connection) { echo "Client connected "; }; // 客户端断开连接时触发 $worker->onClose = function ($connection) { echo "Client closed "; }; // 接收到客户端消息时触发 $worker->onMessage = function ($connection, $data) { echo "Receive message: $data "; // 处理消息推送逻辑 Gateway::sendToAll($data); }; // 启动Worker Worker::runAll();
Dalam kod di atas, kami mencipta objek WebSocket Worker yang mendengar pada port 2346. Dalam fungsi panggil balik untuk menyambung, menutup dan menerima mesej, kami boleh mengendalikan logik perniagaan yang berkaitan.
Dalam fungsi panggil balik tolak mesej, kami memanggil kaedah Gateway::sendToAll() untuk menolak mesej yang diterima kepada semua pelanggan. Atribut Gateway::$registerAddress digunakan untuk menetapkan alamat pendaftaran Gateway Anda boleh memulakan proses Gateway dalam GatewayWorker untuk menguruskan sambungan pelanggan dan pengedaran mesej secara khusus.
Seterusnya, kami perlu menulis kod pelanggan untuk menyambung ke perkhidmatan WebSocket di atas dan menerima mesej ditolak. Contoh kod adalah seperti berikut:
var ws = new WebSocket("ws://127.0.0.1:2346"); ws.onopen = function () { console.log('Connected'); } ws.onmessage = function (e) { console.log('Received: ' + e.data); } ws.onclose = function () { console.log("Connection closed"); } ws.onerror = function (error) { console.log('Error: ' + error); }
Dalam kod pelanggan, kami mencipta objek WebSocket dan menyambung ke port 2346 perkhidmatan WebSocket. Dengan mendengar acara onmessage, anda boleh menerima mesej yang ditolak oleh pelayan.
Di atas ialah kaedah dan contoh kod khusus menggunakan GatewayWorker untuk melaksanakan push mesej. Dengan mentakrifkan fungsi panggil balik kelas Pekerja untuk mengendalikan sambungan pelanggan dan tolakan mesej, serta menyambung dan menerima mesej dalam kod pelanggan, kami boleh melaksanakan fungsi tolak mesej dengan mudah. Sudah tentu, ini hanyalah salah satu kaedah pelaksanaan, dan kaedah lain boleh dipilih mengikut keperluan dalam aplikasi sebenar.
Saya harap artikel ini akan membantu anda memahami kaedah pelaksanaan tolak mesej dalam dokumen Workerman, dan membantu anda mula membangunkan sembang masa nyata, tolak mesej dan fungsi lain dengan cepat.
Atas ialah kandungan terperinci Kaedah pelaksanaan tolak mesej dalam dokumen Workerman. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!