Amalan pengaturcaraan rangkaian pekerja: membina sistem pemesejan segera berprestasi tinggi
Pengenalan:
Dengan perkembangan pesat Internet, sistem pemesejan segera telah menarik lebih banyak perhatian daripada pengguna. Sistem pemesejan segera tradisional, seperti QQ, WeChat, dsb., sering menghadapi kesesakan prestasi apabila bilangan pengguna ramai dan mesej sangat serentak. Untuk menyelesaikan masalah ini, projek sumber terbuka Workerman telah wujud. Artikel ini akan memperkenalkan cara menggunakan Workerman untuk membina sistem pemesejan segera berprestasi tinggi.
composer require workerman/workerman
Selepas pemasangan selesai, kita boleh menggunakan semua ciri Workerman.
use WorkermanWorker; // 创建一个Worker监听端口 $tcp_worker = new Worker("tcp://0.0.0.0:1234"); // 当客户端连接时的回调函数 $tcp_worker->onConnect = function ($connection) { $connection->send("Welcome to the chat room! "); }; // 当接收到客户端消息时的回调函数 $tcp_worker->onMessage = function ($connection, $data) { // 处理接收到的消息 echo "Received message: " . $data . " "; $connection->send("You said: " . $data . " "); }; // 启动Worker Worker::runAll();
Dengan kod di atas, kami mencipta TCP Worker mendengar pada port 1234. Apabila pelanggan menyambung ke pelayan, pelayan menghantar mesej alu-aluan. Apabila pelanggan menghantar mesej, pelayan mengembalikan mesej tidak berubah. Anda boleh menggunakan alat seperti Telnet untuk menyambung ke pelayan untuk ujian.
use WorkermanWorker; use WorkermanProtocolsWebsocket; // 创建一个WebSocket Worker监听端口 $websocket_worker = new Worker("websocket://0.0.0.0:1234"); // 设置协议处理类 $websocket_worker->onWebSocketConnect = function ($connection, $http_header) { // 处理握手请求 Websocket::dealHandshake($connection, $http_header); // 发送欢迎消息 $connection->send("Welcome to the chat room! "); }; // 当接收到客户端消息时的回调函数 $websocket_worker->onMessage = function ($connection, $data) { // 处理接收到的消息 echo "Received message: " . $data . " "; $connection->send("You said: " . $data . " "); }; // 启动Worker Worker::runAll();
Dengan kod di atas, kami mencipta WebSocket Worker mendengar pada port 1234. Apabila pelanggan menyambung ke pelayan, pelayan menghantar mesej alu-aluan. Apabila pelanggan menghantar mesej, pelayan mengembalikan mesej tidak berubah.
Pertama, buat pelayan WebSocket mendengar pada port yang ditentukan. Apabila pengguna menyambung ke pelayan, pelayan akan menambah sambungan ke senarai pengguna dan menyiarkan mesej bahawa pengguna telah memasuki bilik sembang apabila pengguna menghantar mesej, pelayan akan menyiarkan mesej kepada semua pengguna dalam talian apabila; pengguna memutuskan sambungan, pelayan akan mengalih keluar mereka daripada senarai pengguna dan menyiarkan mesej bahawa pengguna telah meninggalkan bilik sembang.
Berikut ialah contoh kod ringkas:
use WorkermanWorker; use WorkermanProtocolsWebsocket; // 创建一个WebSocket Worker监听端口 $websocket_worker = new Worker("websocket://0.0.0.0:1234"); // 设置协议处理类 $websocket_worker->onWebSocketConnect = function ($connection, $http_header) { // 处理握手请求 Websocket::dealHandshake($connection, $http_header); // 将连接添加到用户列表中 global $user_list; $user_list[$connection->id] = $connection; // 广播用户进入聊天室的消息 broadcastMessage("User #$connection->id entered the chat room. "); }; // 当接收到客户端消息时的回调函数 $websocket_worker->onMessage = function ($connection, $data) { // 处理接收到的消息 broadcastMessage("User #$connection->id: $data"); }; // 当用户断开连接时的回调函数 $websocket_worker->onClose = function ($connection) { // 将连接从用户列表中移除 global $user_list; unset($user_list[$connection->id]); // 广播用户离开聊天室的消息 broadcastMessage("User #$connection->id left the chat room."); }; // 启动Worker Worker::runAll(); // 广播消息给所有在线用户 function broadcastMessage($message) { global $user_list; foreach ($user_list as $connection) { $connection->send($message); } }
Melalui kod di atas, kami telah melaksanakan sistem pemesejan segera yang mudah. Setiap kali pengguna baharu memasuki bilik sembang, menghantar mesej atau meninggalkan bilik sembang, pelayan menyiarkan mesej yang sepadan kepada semua pengguna dalam talian.
Kesimpulan:
Dalam artikel ini, kami menggunakan rangka kerja Workerman untuk menunjukkan cara membina sistem pemesejan segera berprestasi tinggi melalui kod sampel mudah. Dengan mod operasi tidak menyekat asynchronous Workerman dan sokongan untuk konkurensi tinggi, kami boleh mengatasi tekanan sebilangan besar pengguna dengan mudah. Saya berharap melalui pengenalan artikel ini, pembaca dapat memahami dengan lebih mendalam tentang Workerman dan dapat mengaplikasikannya dalam projek sebenar.
Atas ialah kandungan terperinci Amalan pengaturcaraan rangkaian pekerja: cipta sistem pemesejan segera berprestasi tinggi. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!