Jadual Kandungan
Keperluan alam sekitar
Buat Projek
Buat pengawal
Dalam kaedah
dan tulis kandungan berikut:
Perkhidmatan Websocket telah dimulakan dan anda boleh mengujinya dengan mengakses aplikasi anda. Anda boleh menggunakan alamat ini:
Rumah rangka kerja php ThinkPHP Melaksanakan siaran Websocket menggunakan ThinkPHP6

Melaksanakan siaran Websocket menggunakan ThinkPHP6

Jun 20, 2023 am 08:41 AM
thinkphp websocket siaran

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
Salin selepas log masuk

Selepas selesai, jalankan arahan berikut untuk memasang:

"require": {
    "topthink/think-swoole": "^2.0",
    "swoole/swoole": "^4.7"
}
Salin selepas log masuk

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
Salin selepas log masuk

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

<🎜 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)
    {
    }
}
Salin selepas log masuk

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);
Salin selepas log masuk

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;
    }
}
Salin selepas log masuk

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,
];
Salin selepas log masuk

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

Bagaimana untuk menjalankan projek thinkphp Bagaimana untuk menjalankan projek thinkphp Apr 09, 2024 pm 05:33 PM

Untuk menjalankan projek ThinkPHP, anda perlu: memasang Komposer untuk mencipta projek, masukkan direktori projek dan laksanakan php bin/console serve;

Bagaimana untuk mencapai komunikasi masa nyata menggunakan PHP dan WebSocket Bagaimana untuk mencapai komunikasi masa nyata menggunakan PHP dan WebSocket Dec 17, 2023 pm 10:24 PM

Dengan perkembangan teknologi Internet yang berterusan, komunikasi masa nyata telah menjadi bahagian yang amat diperlukan dalam kehidupan seharian. Komunikasi masa nyata yang cekap, kependaman rendah boleh dicapai menggunakan teknologi WebSockets, dan PHP, sebagai salah satu bahasa pembangunan yang paling banyak digunakan dalam bidang Internet, juga menyediakan sokongan WebSocket yang sepadan. Artikel ini akan memperkenalkan cara menggunakan PHP dan WebSocket untuk mencapai komunikasi masa nyata, dan menyediakan contoh kod khusus. 1. Apakah itu WebSocket?

Terdapat beberapa versi thinkphp Terdapat beberapa versi thinkphp Apr 09, 2024 pm 06:09 PM

ThinkPHP mempunyai berbilang versi yang direka untuk versi PHP yang berbeza. Versi utama termasuk 3.2, 5.0, 5.1 dan 6.0, manakala versi kecil digunakan untuk membetulkan pepijat dan menyediakan ciri baharu. Versi stabil terkini ialah ThinkPHP 6.0.16. Apabila memilih versi, pertimbangkan versi PHP, keperluan ciri dan sokongan komuniti. Adalah disyorkan untuk menggunakan versi stabil terkini untuk prestasi dan sokongan terbaik.

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

Bagaimana untuk menjalankan thinkphp Bagaimana untuk menjalankan thinkphp Apr 09, 2024 pm 05:39 PM

Langkah-langkah untuk menjalankan ThinkPHP Framework secara setempat: Muat turun dan nyahzip ThinkPHP Framework ke direktori tempatan. Buat hos maya (pilihan) yang menunjuk ke direktori akar ThinkPHP. Konfigurasikan parameter sambungan pangkalan data. Mulakan pelayan web. Mulakan aplikasi ThinkPHP. Akses URL aplikasi ThinkPHP dan jalankannya.

Bagaimanakah Java Websocket melaksanakan fungsi papan putih dalam talian? Bagaimanakah Java Websocket melaksanakan fungsi papan putih dalam talian? Dec 17, 2023 pm 10:58 PM

Bagaimanakah JavaWebsocket melaksanakan fungsi papan putih dalam talian? Dalam era Internet moden, orang ramai memberi lebih banyak perhatian kepada pengalaman kerjasama dan interaksi masa nyata. Papan putih dalam talian ialah fungsi yang dilaksanakan berdasarkan Websocket Ia membolehkan berbilang pengguna bekerjasama dalam masa nyata untuk mengedit papan lukisan yang sama dan menyelesaikan operasi seperti lukisan dan anotasi. Ia menyediakan penyelesaian yang mudah untuk pendidikan dalam talian, mesyuarat jarak jauh, kerjasama pasukan dan senario lain. 1. Latar belakang teknikal WebSocket ialah protokol baharu yang disediakan oleh HTML5

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

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

See all articles