Rumah rangka kerja php Swoole Pengalaman pembangunan pelayan WebSocket berprestasi tinggi berdasarkan Swoole

Pengalaman pembangunan pelayan WebSocket berprestasi tinggi berdasarkan Swoole

Jun 14, 2023 am 11:48 AM
websocket prestasi tinggi swoole

Websocket ialah protokol komunikasi dupleks penuh berdasarkan TCP, yang membolehkan pelanggan dan pelayan berinteraksi dengan data dalam masa nyata. Protokol Websocket sesuai untuk senario aplikasi seperti penghantaran data masa nyata dan permainan dalam talian Tidak seperti protokol HTTP, Websocket boleh mengekalkan sambungan yang panjang, mengelakkan kelemahan protokol HTTP yang memerlukan penubuhan sambungan TCP untuk setiap permintaan. . Oleh itu, semakin banyak produk menggunakan protokol Websocket untuk penghantaran data.

Untuk meningkatkan prestasi pelayan Websocket, kami boleh menggunakan sambungan Swoole untuk pembangunan. Swoole ialah rangka kerja komunikasi rangkaian PHP berprestasi tinggi yang biasa digunakan. Ia berdasarkan model dipacu peristiwa tak segerak dan melaksanakan coroutine yang biasa digunakan dalam rangka kerja berprestasi tinggi seperti React dan Node.js, yang meningkatkan prestasi PHP dengan ketara. Dalam artikel ini, kami akan memperkenalkan cara untuk membangunkan pelayan Websocket berprestasi tinggi di bawah Swoole dan berkongsi beberapa pengalaman berkaitan.

1. Mulakan perkhidmatan Swoole

Sebelum memulakan perkhidmatan Swoole, kita perlu memasang sambungan Swoole terlebih dahulu. Swoole menyokong sistem pengendalian biasa seperti Windows, Linux, macOS, dll. Kami boleh menggunakan arahan pecl untuk memasang sambungan, atau memuat turun kod sumber daripada tapak web rasmi Swoole untuk penyusunan dan pemasangan. Di sini kita mengambil pemasangan arahan pecl sebagai contoh:

pecl install swoole
Salin selepas log masuk

Selepas pemasangan selesai, anda boleh menggunakan fungsi swoole_version() dalam kod PHP untuk melihat maklumat versi Swoole untuk memastikan sambungan telah dipasang dengan betul.

  1. Cipta contoh perkhidmatan

Sebelum menggunakan Swoole untuk membangunkan pelayan Websocket, anda perlu mencipta contoh perkhidmatan Kami boleh menggunakan kelas SwooleWebSocketServer yang disediakan oleh Swole untuk menciptanya, seperti berikut :

$server = new SwooleWebSocketServer('0.0.0.0', 9501);
Salin selepas log masuk

Antaranya, 0.0.0.0 bermaksud mendengar pada semua alamat IP yang tersedia dan 9501 bermaksud nombor port mendengar. Selepas mencipta contoh, kami boleh melakukan beberapa konfigurasi pada pelayan, seperti menetapkan bilangan proses pekerja, menetapkan mod pengendalian, mendayakan protokol TCP, dll. Untuk butiran, sila rujuk dokumentasi rasmi Swoole.

  1. Daftar fungsi panggil balik acara

Komunikasi antara pelayan Websocket dan klien dicapai melalui fungsi panggil balik acara Kami perlu mendaftarkan fungsi panggil balik dalam contoh perkhidmatan supaya contoh perkhidmatan Mampu bertindak balas terhadap peristiwa yang sesuai. Swoole menyediakan banyak fungsi panggil balik (seperti onMessage, onOpen, onClose, onRequest, onHandShake, dll. Apabila kami membangunkan pelayan Websocket, kami biasanya perlu mendaftarkan tiga fungsi panggil balik berikut:

//连接成功时触发
$server->on('open', function (SwooleWebSocketServer $server, $request) {
    //处理连接事件
});

//收到客户端消息时触发
$server->on('message', function (SwooleWebSocketServer $server, $frame) {
    //处理消息事件
});

//连接关闭时触发
$server->on('close', function (SwooleWebSocketServer $server, $fd) {
    //处理关闭事件
});
Salin selepas log masuk

Antaranya, acara terbuka berada di sebelah klien Selepas sambungan berjaya diwujudkan, acara mesej dicetuskan selepas klien menghantar mesej, dan acara tutup dicetuskan selepas sambungan ditutup. Dalam Swoole, objek $frame mewakili badan data mesej WebSocket dan kandungan khusus mesej itu boleh diperolehi melalui $frame->data.

  1. Mulakan perkhidmatan

Selepas mendaftarkan fungsi panggil balik, kita boleh memulakan perkhidmatan ini:

$server->start();
Salin selepas log masuk

Apabila memulakan perkhidmatan , ia akan dibuat secara automatik Proses pekerja dan benang reaktor digunakan untuk mengendalikan proses perniagaan seperti sambungan pelanggan dan penghantaran mesej.

2. Pengalaman pembangunan perkhidmatan Websocket

Apabila menggunakan Swoole untuk membangunkan pelayan Websocket, anda juga perlu memberi perhatian kepada aspek berikut:

  1. Mekanisme degupan jantung

Protokol Websocket tidak mempunyai permintaan dan respons yang jelas dalam protokol HTTP, tetapi menggunakan push mesej untuk penghantaran data masa nyata. Memandangkan pelayan Websocket perlu memantau sambungan pelanggan dan penghantaran mesej untuk masa yang lama, ia tidak boleh menghantar mesej apabila pelanggan memutuskan sambungan Oleh itu, kami perlu melaksanakan mekanisme degupan jantung dan menghantar permintaan degupan jantung kepada klien dengan kerap untuk mengekalkan sambungan. Dalam Swoole, kita boleh menggunakan ping dan pong mesej untuk melaksanakan mekanisme degupan jantung.

//心跳包
$server->tick(30000, function () use ($server) {
    foreach ($server->connections as $fd) {
        $server->push($fd, json_encode(['type' => 'ping']));
    }
});

//心跳响应
$server->on('message', function (SwooleWebSocketServer $server, $frame) {
    if ($frame->data == 'pong') {
        //处理心跳响应
    }
});
Salin selepas log masuk

Antaranya, fungsi tick boleh menghantar permintaan degupan jantung kepada pelanggan dengan kerap, dan fungsi panggil balik onMessage boleh memproses tindak balas degupan jantung pelanggan untuk memastikan pelanggan mengekalkan sambungan dengan pelayan.

  1. Siaran Mesej

Senario yang sangat biasa untuk pelayan Websocket ialah menyiarkan mesej kepada semua pelanggan, seperti rentak, permainan berbilang pemain, dsb. Dalam Swoole, kita boleh menggunakan kaedah push untuk menyiarkan mesej.

//处理广播消息
$message = 'Hello, everyone!';
foreach ($server->connections as $fd) {
    $server->push($fd, $message);
}
Salin selepas log masuk

Selain itu, anda juga boleh menghantar mesej yang disasarkan kepada pelanggan tertentu berdasarkan maklumat sambungan pelanggan.

  1. Pemformatan data

Dalam protokol Websocket, data yang dikomunikasikan antara klien dan pelayan mungkin dihantar dalam JSON, XML dan format lain, jadi apabila memproses yang diterima data , kita perlu memformat data, seperti menggunakan json_decode untuk menghuraikan format JSON.

//处理消息事件
$server->on('message', function (SwooleWebSocketServer $server, $frame) {
    $data = json_decode($frame->data, true);
    //处理数据
});
Salin selepas log masuk
  1. Pengurusan berbilang proses

Dalam pelayan Websocket, akan terdapat sejumlah besar permintaan pelanggan Untuk meningkatkan keupayaan pemprosesan pelayan, kami boleh menggunakan Ciri pengurusan pelbagai proses Swoole. Swoole menyokong proses Induk dan berbilang proses Pekerja Proses Induk digunakan untuk mengurus proses Pekerja, dan proses Pekerja bertanggungjawab untuk memproses permintaan pelanggan tertentu. Kami boleh menetapkan bilangan proses Pekerja apabila membuat contoh perkhidmatan untuk menyesuaikan diri dengan permintaan beban saiz yang berbeza.

$server->set([
    'worker_num' => 4,
]);
Salin selepas log masuk

Dalam persekitaran berbilang proses, anda perlu memberi perhatian kepada isu penyegerakan dan perkongsian data Anda boleh menggunakan Proses, Jadual, Atom, Mutex dan komponen lain yang disediakan oleh Swoole untuk mencapai komunikasi dan penyegerakan antara proses. .

Ringkasnya, menggunakan Swoole untuk membangunkan pelayan Websocket boleh meningkatkan prestasi dan kestabilan pelayan dengan sangat baik. Ia juga memerlukan kita mahir dalam ciri berkaitan dan kemahiran pembangunan Swoole. Saya harap artikel ini dapat membantu pembangun dan menyediakan rujukan untuk pelaksanaan pelayan Websocket berprestasi tinggi yang lebih baik.

Atas ialah kandungan terperinci Pengalaman pembangunan pelayan WebSocket berprestasi tinggi berdasarkan Swoole. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

PHP dan WebSocket: Amalan terbaik untuk pemindahan data masa nyata PHP dan WebSocket: Amalan terbaik untuk pemindahan data masa nyata Dec 18, 2023 pm 02:10 PM

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

SSE dan WebSocket SSE dan WebSocket Apr 17, 2024 pm 02:18 PM

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

Cara menggunakan coroutine swoole dalam laravel Cara menggunakan coroutine swoole dalam laravel Apr 09, 2024 pm 06:48 PM

Menggunakan coroutine Swoole dalam Laravel boleh memproses sejumlah besar permintaan secara serentak. Kelebihannya termasuk: Pemprosesan serentak: membolehkan berbilang permintaan diproses pada masa yang sama. Prestasi tinggi: Berdasarkan mekanisme acara epoll Linux, ia memproses permintaan dengan cekap. Penggunaan sumber yang rendah: memerlukan lebih sedikit sumber pelayan. Mudah untuk disepadukan: Penyepaduan lancar dengan rangka kerja Laravel, mudah digunakan.

golang Petua pengaturcaraan WebSocket: mengendalikan sambungan serentak golang Petua pengaturcaraan WebSocket: mengendalikan sambungan serentak Dec 18, 2023 am 10:54 AM

Golang ialah bahasa pengaturcaraan yang berkuasa, dan penggunaannya dalam pengaturcaraan WebSocket semakin dihargai oleh pembangun. WebSocket ialah protokol berasaskan TCP yang membenarkan komunikasi dua hala antara klien dan pelayan. Dalam artikel ini, kami akan memperkenalkan cara menggunakan Golang untuk menulis pelayan WebSocket yang cekap yang mengendalikan berbilang sambungan serentak pada masa yang sama. Sebelum memperkenalkan teknik, mari kita pelajari dahulu apa itu WebSocket. Pengenalan kepada WebSocketWeb

Mana satu lebih baik, swool atau pekerja? Mana satu lebih baik, swool atau pekerja? Apr 09, 2024 pm 07:00 PM

Swoole dan Workerman kedua-duanya adalah rangka kerja pelayan PHP berprestasi tinggi. Terkenal dengan pemprosesan tak segerak, prestasi cemerlang dan kebolehskalaannya, Swoole sesuai untuk projek yang perlu mengendalikan sejumlah besar permintaan serentak dan daya pemprosesan yang tinggi. Workerman menawarkan fleksibiliti mod tak segerak dan segerak, dengan API intuitif yang lebih sesuai untuk kemudahan penggunaan dan projek yang mengendalikan volum serentak yang lebih rendah.

Cara menggunakan WebSocket untuk pemindahan fail dalam golang Cara menggunakan WebSocket untuk pemindahan fail dalam golang Dec 18, 2023 am 09:06 AM

Cara menggunakan WebSocket untuk pemindahan fail dalam golang WebSocket ialah protokol rangkaian yang menyokong komunikasi dua hala dan boleh mewujudkan sambungan berterusan antara penyemak imbas dan pelayan. Dalam golang, kita boleh menggunakan gorila/soket web perpustakaan pihak ketiga untuk melaksanakan fungsi WebSocket. Artikel ini akan memperkenalkan cara menggunakan perpustakaan golang dan gorila/soket web untuk pemindahan fail. Pertama, kita perlu memasang gorila

Panduan pembangunan PHP Websocket untuk melaksanakan fungsi terjemahan masa nyata Panduan pembangunan PHP Websocket untuk melaksanakan fungsi terjemahan masa nyata Dec 18, 2023 pm 05:52 PM

Panduan Pembangunan Soket Web PHP: Melaksanakan Fungsi Terjemahan Masa Nyata Pengenalan: Dengan perkembangan Internet, komunikasi masa nyata menjadi semakin penting dalam pelbagai senario aplikasi. Sebagai protokol komunikasi yang baru muncul, Websocket menyediakan sokongan yang baik untuk komunikasi masa nyata. Artikel ini akan membawa anda melalui pemahaman terperinci tentang cara menggunakan PHP untuk membangunkan aplikasi Websocket, dan menggabungkan fungsi terjemahan masa nyata untuk menunjukkan aplikasi khususnya. 1. Apakah protokol Websocket? Protokol Websocket ialah a

Mana satu yang mempunyai prestasi yang lebih baik, swoole atau java? Mana satu yang mempunyai prestasi yang lebih baik, swoole atau java? Apr 09, 2024 pm 07:03 PM

Perbandingan prestasi: Throughput: Swoole mempunyai throughput yang lebih tinggi berkat mekanisme coroutinenya. Latensi: Penukaran konteks coroutine Swoole mempunyai overhed yang lebih rendah dan kependaman yang lebih kecil. Penggunaan ingatan: Coroutine Swoole menduduki kurang memori. Kemudahan penggunaan: Swoole menyediakan API pengaturcaraan serentak yang lebih mudah digunakan.

See all articles