cari
Rumahrangka kerja phpThinkPHPMelaksanakan siaran Websocket menggunakan ThinkPHP6

Dengan pembangunan berterusan aplikasi web moden, komunikasi masa nyata telah menjadi salah satu fungsi yang diperlukan. Teknologi WebSocket ialah salah satu kaedah komunikasi masa nyata yang paling popular, yang boleh mewujudkan sambungan dua hala yang berterusan antara pelayan dan pelanggan untuk mencapai komunikasi masa nyata.

ThinkPHP ialah rangka kerja PHP yang sangat popular ThinkPHP 6 disertakan dengan pakej sambungan Swoole, menjadikannya sangat mudah untuk menggunakan teknologi WebSocket. Artikel ini akan memperkenalkan cara menggunakan rangka kerja ThinkPHP 6 untuk melaksanakan fungsi siaran WebSocket.

Keperluan alam sekitar

Sebelum bermula, anda perlu menyediakan persekitaran berikut:

  • PHP 7.2+
  • Sambungan Swoole
  • Komposer
  • Pengetahuan Pembangunan Web Asas

Buat Projek

Pertama, kita perlu mencipta projek baharu:

rreee

Kemudian, untuk memudahkan daripada menggunakan WebSocket, kita perlu menambah sambungan Swoole dalam fail composer.json projek:

composer create-project topthink/think my-project

Selepas selesai, jalankan arahan berikut untuk memasang:

"require": {
    "topthink/think-swoole": "^2.0",
    "swoole/swoole": "^4.7"
}

Buat pengawal

Seterusnya, kita perlu mencipta pengawal untuk mengendalikan permintaan WebSocket. Cipta fail bernama app/controller dalam direktori Websocket.php dan tulis kod berikut:

composer install

Dalam kod di atas, kami mewarisi kelas thinkswooleWebsocket dan menulis semula tiga daripadanya Kaedah:

  • digunakan untuk memantau peristiwa sambungan; kaedah onOpen
  • digunakan untuk memantau peristiwa menerima mesej; . onMessage
  • Pada masa ini, kaedah ini tidak melakukan apa-apa Seterusnya, kami akan menambah logik komunikasi WebSocket kepada kaedah ini. onClose
  • Daftar laluan

Selepas pengawal dibuat, kita perlu mendaftarkannya dalam laluan. Tambahkan kandungan berikut dalam fail

:

<?php

declare(strict_types=1);

namespace appcontroller;

use thinkswooleWebsocket as SwooleWebsocket;
use SwooleWebSocketFrame;

class Websocket extends SwooleWebsocket
{
    /**
     * 监听连接事件
     * @param SwooleWebSocketServer $server
     * @param SwooleHttpRequest $request
     */
    public function onOpen($server, $request)
    {
    }

    /**
     * 监听接收消息事件
     * @param SwooleWebSocketServer $server
     * @param Frame $frame
     */
    public function onMessage($server, Frame $frame)
    {
    }

    /**
     * 监听关闭事件
     * @param SwooleWebSocketServer $server
     * @param int $fd
     */
    public function onClose($server, $fd)
    {
    }
}

Kaedah

digunakan di sini untuk mendaftarkan laluan. Kaedah permintaan laluan ini ialah app/route.php, laluannya ialah

dan permintaan dipetakan kepada kaedah

pengawal Route::post. POST/wsMenulis logik komunikasi WebSocketWebsocketonMessageKini, kami telah menyelesaikan penciptaan dan pendaftaran laluan dan pengawal WebSocket. Seterusnya, kita perlu menambah logik untuk komunikasi WebSocket dalam pengawal. Kami akan menggunakan pelayan WebSocket Swoole untuk melaksanakan komunikasi WebSocket.

Dalam kaedah

, kita boleh mendapatkan objek sambungan pelanggan dan menyimpannya untuk kegunaan seterusnya. Dalam kaedah

, kita boleh mendapatkan mesej yang dihantar oleh pelanggan dan menyiarkan mesej ini kepada pelanggan lain. Dalam kaedah

, kita perlu mengalih keluar klien daripada kumpulan sambungan.

onOpenBuat fail bernama onMessage dalam direktori onClose dan tulis kod berikut:

use thinkacadeRoute;

Route::post('/ws', 'Websocket@onMessage')->middleware(    hinkmiddlewareAllowCrossDomain::class);

Konfigurasikan perkhidmatan WebSocket app/controllerWebSocketServer.phpTulis kod perkhidmatan WebSocket Sebelum ini, kami memerlukan untuk mencipta fail konfigurasi bernama

dalam direktori

dan tulis kandungan berikut:

<?php

declare(strict_types=1);

namespace appcontroller;

use SwooleHttpResponse;
use SwooleWebSocketFrame;
use SwooleWebSocketServer;
use thinkswoolewebsocketHandlerInterface;

class WebSocketServer implements HandlerInterface
{
    /**
     * @var array $connections
     */
    private $connections = [];

    /**
     * 监听连接事件
     * @param Server $server
     * @param SwooleHttpRequest $request
     */
    public function onOpen(Server $server, SwooleHttpRequest $request): void
    {
        $this->connections[$request->fd] = $request->fd;

        echo "client-{$request->fd} is connected
";
    }

    /**
     * 监听消息事件
     * @param Server $server
     * @param Frame $frame
     */
    public function onMessage(Server $server, Frame $frame): void
    {
        foreach ($this->connections as $fd) {
            $info = $server->getClientInfo((int)$fd);
            if ($info && isset($info['websocket_status']) && $info['websocket_status'] == WEBSOCKET_STATUS_FRAME) {
                $server->push($fd, $frame->data);
            } else {
                unset($this->connections[$fd]);
            }
        }

        echo "received message from client-{$frame->fd}: {$frame->data}
";
    }

    /**
     * 监听关闭事件
     * @param Server $server
     * @param int $fd
     * @param int $reactorId
     */
    public function onClose(Server $server, int $fd, int $reactorId): void
    {
        unset($this->connections[$fd]);

        echo "client-{$fd} is closed
";
    }

    /**
     * @param Response $response
     */
    public function onHandShake(Request $request, Response $response): bool
    {
        // Do nothing
        return true;
    }
}

Dalam kod di atas, kami memberitahu aplikasi bagaimana untuk memulakan Swoole WebSocket melalui fail konfigurasi Serve. Kami memulakan jenis soket config, mengikatnya pada swoole.php dan mendayakan mod berbilang proses, menggunakan protokol TCP. Item konfigurasi

menetapkan bilangan proses pada pelayan

digunakan di sini untuk mengembalikan bilangan CPU sistem websocket item konfigurasi menentukan kelas 0.0.0.0:9501 yang kami buat di atas. worker_numswoole_cpu_num()Jalankan perkhidmatan WebSocket handlerWebSocketServerSelepas melengkapkan kod untuk mencipta dan mengkonfigurasi perkhidmatan WebSocket, kami perlu menjalankan kod untuk memulakan perkhidmatan WebSocket. Cuma laksanakan arahan berikut pada baris arahan:

return [
    'socket_type' => 'websocket',
    'host'        => '0.0.0.0',
    'port'        => 9501,
    'mode'        => SWOOLE_PROCESS,
    'sock_type'   => SWOOLE_SOCK_TCP,
    'settings' => [
        'worker_num' => swoole_cpu_num(),
    ],
    'handler' => ppcontrollerWebSocketServer::class,
];

Perkhidmatan Websocket telah dimulakan dan anda boleh mengujinya dengan mengakses aplikasi anda. Anda boleh menggunakan alamat ini:

. Buka berbilang tab dalam penyemak imbas untuk menguji sambungan WebSocket, fungsi penghantaran dan penerimaan mesej masing-masing.

Ringkasan

ws://your-domain:9501/wsArtikel ini memperkenalkan cara menggunakan rangka kerja ThinkPHP 6 untuk melaksanakan fungsi siaran WebSocket. Kami mencapai ini dengan mencipta pengawal, mendaftarkan laluan dan menulis logik komunikasi WebSocket, dan mengkonfigurasi perkhidmatan WebSocket. Contoh ini boleh digunakan sebagai amalan terbaik WebSocket yang mudah dan menyediakan rujukan untuk kami membangunkan fungsi WebSocket yang lebih maju.

Atas ialah kandungan terperinci Melaksanakan siaran Websocket menggunakan ThinkPHP6. 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
Apakah ciri-ciri utama rangka kerja ujian ThinkPHP?Apakah ciri-ciri utama rangka kerja ujian ThinkPHP?Mar 18, 2025 pm 05:01 PM

Artikel ini membincangkan rangka kerja ujian ThinkPHP, yang menonjolkan ciri-ciri utamanya seperti ujian unit dan integrasi, dan bagaimana ia meningkatkan kebolehpercayaan aplikasi melalui pengesanan bug awal dan kualiti kod yang lebih baik.

Bagaimana cara menggunakan ThinkPhp untuk membina suapan data pasaran saham masa nyata?Bagaimana cara menggunakan ThinkPhp untuk membina suapan data pasaran saham masa nyata?Mar 18, 2025 pm 04:57 PM

Artikel membincangkan menggunakan ThinkPHP untuk suapan data pasaran saham masa nyata, memberi tumpuan kepada persediaan, ketepatan data, pengoptimuman, dan langkah-langkah keselamatan.

Apakah pertimbangan utama untuk menggunakan ThinkPhp dalam seni bina tanpa pelayan?Apakah pertimbangan utama untuk menggunakan ThinkPhp dalam seni bina tanpa pelayan?Mar 18, 2025 pm 04:54 PM

Artikel ini membincangkan pertimbangan utama untuk menggunakan ThinkPhp dalam arkitek tanpa pelayan, memberi tumpuan kepada pengoptimuman prestasi, reka bentuk tanpa statik, dan keselamatan. Ia menyoroti faedah seperti kecekapan kos dan skalabiliti, tetapi juga menangani cabaran

Bagaimana untuk melaksanakan penemuan perkhidmatan dan mengimbangi beban dalam microservices ThinkPHP?Bagaimana untuk melaksanakan penemuan perkhidmatan dan mengimbangi beban dalam microservices ThinkPHP?Mar 18, 2025 pm 04:51 PM

Artikel ini membincangkan pelaksanaan penemuan perkhidmatan dan mengimbangi beban dalam microservices ThinkPHP, memberi tumpuan kepada persediaan, amalan terbaik, kaedah integrasi, dan alat yang disyorkan. [159 aksara]

Apakah ciri -ciri canggih bekas suntikan ketergantungan ThinkPhp?Apakah ciri -ciri canggih bekas suntikan ketergantungan ThinkPhp?Mar 18, 2025 pm 04:50 PM

ThinkPhp's Container IOC menawarkan ciri -ciri canggih seperti pemuatan malas, mengikat kontekstual, dan suntikan kaedah untuk pengurusan ketergantungan yang cekap di php apps.Character Count: 159

Bagaimana cara menggunakan ThinkPhp untuk membina alat kerjasama masa nyata?Bagaimana cara menggunakan ThinkPhp untuk membina alat kerjasama masa nyata?Mar 18, 2025 pm 04:49 PM

Artikel ini membincangkan menggunakan ThinkPHP untuk membina alat kerjasama masa nyata, memberi tumpuan kepada persediaan, integrasi WebSocket, dan amalan terbaik keselamatan.

Apakah faedah utama menggunakan ThinkPhp untuk membina aplikasi SaaS?Apakah faedah utama menggunakan ThinkPhp untuk membina aplikasi SaaS?Mar 18, 2025 pm 04:46 PM

ThinkPHP memberi manfaat kepada aplikasi SaaS dengan reka bentuk ringan, seni bina MVC, dan extensibility. Ia meningkatkan skalabiliti, mempercepatkan pembangunan, dan meningkatkan keselamatan melalui pelbagai ciri.

Bagaimana untuk membina sistem giliran tugas yang diedarkan dengan ThinkPhp dan RabbitMQ?Bagaimana untuk membina sistem giliran tugas yang diedarkan dengan ThinkPhp dan RabbitMQ?Mar 18, 2025 pm 04:45 PM

Artikel ini menggariskan membina sistem giliran tugas yang diedarkan menggunakan ThinkPhp dan RabbitMQ, yang memberi tumpuan kepada pemasangan, konfigurasi, pengurusan tugas, dan skalabilitas. Isu -isu utama termasuk memastikan ketersediaan yang tinggi, mengelakkan perangkap biasa seperti implope

See all articles

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)
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
4 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌

Alat panas

Penyesuai Pelayan SAP NetWeaver untuk Eclipse

Penyesuai Pelayan SAP NetWeaver untuk Eclipse

Integrasikan Eclipse dengan pelayan aplikasi SAP NetWeaver.

Muat turun versi mac editor Atom

Muat turun versi mac editor Atom

Editor sumber terbuka yang paling popular

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Persekitaran pembangunan bersepadu PHP yang berkuasa

VSCode Windows 64-bit Muat Turun

VSCode Windows 64-bit Muat Turun

Editor IDE percuma dan berkuasa yang dilancarkan oleh Microsoft

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa