Rumah  >  Artikel  >  rangka kerja php  >  Cara menggunakan Swoole untuk membina pelayan WebSocket berprestasi tinggi

Cara menggunakan Swoole untuk membina pelayan WebSocket berprestasi tinggi

WBOY
WBOYasal
2023-06-13 23:59:201421semak imbas

Dalam beberapa tahun kebelakangan ini, teknologi WebSocket telah menjadi semakin popular dalam pembangunan Internet, terutamanya dalam bidang seperti komunikasi masa nyata, permainan dalam talian dan mesej tolak. Sebagai sambungan PHP tak segerak berprestasi tinggi, Swoole boleh membantu pembangun membina pelayan WebSocket berprestasi tinggi dengan mudah. Artikel ini akan memperkenalkan cara menggunakan Swoole untuk membina pelayan WebSocket berprestasi tinggi.

1. Pasang Swoole

Swoole menyokong versi PHP 5.3~7.4 dan boleh dipasang melalui pecl atau kod sumber. Ambil pemasangan kod sumber sebagai contoh:

Mula-mula muat turun pakej pemasangan Swoole, kemudian nyahzip ke dalam direktori dan laksanakan arahan berikut:

phpize
./configure
make
make install

Selepas pemasangan selesai, tambahkan yang berikut item konfigurasi ke php.ini untuk mendayakannya sambungan Swoole:

extension=swoole

Selepas pemasangan selesai, gunakan perintah php --ri swoole untuk menanyakan maklumat asas Swoole.

2. Cipta pelayan WebSocket

Mari bina pelayan WebSocket yang ringkas. Mula-mula buat fail server.php dalam direktori akar projek dan masukkan kod berikut:

<?php
$server = new swoole_websocket_server("0.0.0.0", 9502);

$server->on("open", function (swoole_websocket_server $server, swoole_http_request $request) {
    echo "client {$request->fd} connected
";
});

$server->on("message", function (swoole_websocket_server $server, $frame) {
    echo "received message: {$frame->data}
";
});

$server->on("close", function (swoole_websocket_server $server, $fd) {
    echo "client {$fd} closed
";
});

$server->start();

Dalam kod di atas, kami mula-mula mencipta contoh swoole_websocket_server dan tetapkan alamat pendengaran kepada 0.0.0.0 dan port kepada 9502 . Kemudian ketiga-tiga peristiwa buka, mesej dan tutup dipantau masing-masing, dan fungsi pemprosesan peristiwa yang sepadan dicetuskan apabila sambungan klien diwujudkan, mesej diterima dan sambungan ditutup.

Seterusnya, jalankan arahan berikut pada konsol untuk memulakan pelayan WebSocket:

php server.php

Jika semuanya normal, anda boleh melihat output yang serupa dengan yang berikut:

2019-06-17 10:51:17|INFO|Server Start: 0.0.0.0:9502

3 . Uji pelayan WebSocket

Selepas memulakan pelayan WebSocket, anda boleh menggunakan alat pemalam WebSocket yang biasa digunakan oleh pembangun bahagian hadapan, seperti pemalam Klien WebSocket Mudah Firefox atau pemalam Klien WebSocket Chrome untuk menguji sama ada pelayan berfungsi dengan betul.

Ambil Firefox Simple WebSocket Client sebagai contoh Selepas membuka pemalam, masukkan ws://127.0.0.1:9502 dan klik butang Sambung. Pada masa ini, kami akan mendapati bahawa log "klien 1 disambungkan" adalah output pada konsol pelayan, yang menunjukkan bahawa klien WebSocket telah berjaya disambungkan ke pelayan.

Kami boleh memasukkan kandungan ujian dalam kawasan penghantaran pemalam, contohnya, masukkan "hello" dan klik butang hantar Anda boleh melihat log masuk "received message: hello". konsol, menunjukkan bahawa pelayan telah berjaya menerima Mesej yang dihantar oleh klien WebSocket.

4. Tingkatkan prestasi

Dalam senario trafik yang besar, prestasi pelayan WebSocket adalah sangat kritikal. Swoole menyediakan pelbagai mekanisme untuk meningkatkan prestasi pelayan WebSocket.

  1. Mulakan coroutine

Dengan memanggil fungsi SwooleCoroutineun dalam kod untuk memulakan coroutine, berbilang coroutine boleh dilaksanakan serentak untuk meningkatkan daya pemprosesan pelayan.

Sebagai contoh, ubah suai kod dalam pelayan.php:

<?php
use SwooleCoroutine;
Coun(function () {
    $server = new swoole_websocket_server("0.0.0.0", 9502);

    $server->on("open", function (swoole_websocket_server $server, swoole_http_request $request) {
        echo "client {$request->fd} connected
";
    });

    $server->on("message", function (swoole_websocket_server $server, $frame) {
        echo "received message: {$frame->data}
";
    });

    $server->on("close", function (swoole_websocket_server $server, $fd) {
        echo "client {$fd} closed
";
    });

    $server->start();
});
  1. Tetapkan bilangan pekerja

Apabila memulakan pelayan, anda boleh menetapkan bilangan pekerja. Meningkatkan keupayaan pemprosesan serentak pelayan. Bilangan pekerja boleh ditetapkan dengan cara berikut:

$server->set([
    'worker_num' => 4,   // 工作进程数量
]);

Di bawah coroutine, bilangan pekerja perlu ditetapkan dalam fungsi run.

  1. Gunakan MySQL tak segerak

Jika pelayan WebSocket perlu mengendalikan pangkalan data, anda boleh menggunakan klien MySQL tak segerak Swoole untuk mengelakkan sekatan yang disebabkan oleh operasi pangkalan data, dengan itu meningkatkan prestasi pelayan .

Sebagai contoh, kod sampel untuk menggunakan klien MySQL tak segerak Swoole untuk mendapatkan rekod adalah seperti berikut:

$db = new SwooleCoroutineMySQL();
$db->connect([
    'host' => 'localhost',
    'port' => 3306,
    'user' => 'root',
    'password' => '',
    'database' => 'test',
]);

$res = $db->query('SELECT * FROM users WHERE id = 1');

Di atas adalah proses asas cara menggunakan Swoole untuk membina prestasi tinggi pelayan WebSocket. Dengan menggunakan sokongan tak segerak, pelbagai proses, coroutine dan kelebihan lain yang disediakan oleh Swoole, prestasi pelayan WebSocket boleh dipertingkatkan dengan banyak, menjadikan aplikasi lebih stabil dan cekap.

Atas ialah kandungan terperinci Cara menggunakan Swoole untuk membina pelayan WebSocket berprestasi tinggi. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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