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.
- Pengenalan kepada Workerman
Workerman ialah rangka kerja komunikasi rangkaian berprestasi tinggi yang dibangunkan berdasarkan PHP. Berbanding dengan mod pengendalian PHP tradisional, seperti Apache, Nginx, dsb., Workerman menggunakan mod operasi tak segerak dan tidak menyekat sepenuhnya, yang meningkatkan kecekapan komunikasi rangkaian. Pada masa yang sama, Workerman menyokong berbilang protokol, seperti TCP, UDP, dll., membolehkan kami memilih secara fleksibel mengikut keperluan yang berbeza. Di samping itu, Workerman juga mempunyai sokongan yang sangat baik untuk konkurensi yang tinggi dan dapat dengan mudah mengatasi tekanan sebilangan besar pengguna.
- Persediaan
Untuk mula membangunkan sistem pemesejan segera kami, kami perlu memasang Workerman terlebih dahulu. Ia boleh dipasang melalui arahan berikut:
1 | composer require workerman/workerman
|
Salin selepas log masuk
Selepas pemasangan selesai, kita boleh menggunakan semua ciri Workerman.
- Buat pelayan TCP
Kami mula-mula mencipta pelayan TCP mudah, mendengar pada port yang ditentukan. Apabila pengguna menyambung ke pelayan, pelayan mengembalikan mesej alu-aluan dan menerima mesej yang dihantar oleh pengguna. Berikut ialah contoh kod mudah:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | use WorkermanWorker;
$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::runAll();
|
Salin selepas log masuk
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.
- Buat Pelayan WebSocket
WebSocket ialah protokol komunikasi dupleks penuh yang boleh mewujudkan sambungan berterusan antara pelanggan dan pelayan. Workerman menyokong protokol WebSocket, dan kami boleh menggunakan Workerman untuk mencipta pelayan WebSocket. Berikut ialah contoh kod ringkas:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | use WorkermanWorker;
use WorkermanProtocolsWebsocket;
$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::runAll();
|
Salin selepas log masuk
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.
- Melaksanakan sistem pesanan segera
Dengan asas di atas, kami boleh terus melaksanakan sistem pesanan segera yang lebih lengkap. Kami menggunakan protokol WebSocket untuk pembangunan di sini.
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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | use WorkermanWorker;
use WorkermanProtocolsWebsocket;
$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::runAll();
function broadcastMessage( $message )
{
global $user_list ;
foreach ( $user_list as $connection ) {
$connection ->send( $message );
}
}
|
Salin selepas log masuk
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!