搜尋
首頁php框架Swoole如何使用Swoole建立高效能的WebSocket伺服器

近年來,WebSocket 技術在網路開發中越來越流行,尤其是在即時通訊、線上遊戲、推播訊息等領域。而 Swoole 作為一款高效能、非同步的 PHP 擴展,可以幫助開發者輕鬆建立高效能的 WebSocket 伺服器。本文將介紹如何使用 Swoole 建立一個高效能的 WebSocket 伺服器。

一、安裝 Swoole

Swoole 支援 PHP 5.3~7.4 版本,可透過 pecl 或原始碼安裝。以下以原始碼安裝為例:

首先下載的Swoole 安裝包,然後解壓縮進入目錄,執行下列指令:

phpize
./configure
make
make install

安裝完成後,在php.ini 中加入下列設定項啟用Swoole 擴充功能:

extension=swoole

安裝完成後,使用php --ri swoole 指令可以查詢Swoole 的基本資訊。

二、建立 WebSocket 伺服器

下面我們來建立一個簡單的 WebSocket 伺服器。首先在專案根目錄下建立一個 server.php 文件,輸入以下程式碼:

<?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();

以上程式碼中,我們先建立了一個 swoole_websocket_server 實例,設定監聽位址為 0.0.0.0,連接埠為 9502。接著分別監聽了 ​​open、message、close 三個事件,在客戶端連線建立、接收到訊息、連線關閉時分別觸發對應的事件處理函數。

接下來在控制台執行以下指令啟動WebSocket 伺服器:

php server.php

如果一切正常,可以看到類似下列輸出:

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

三、測試WebSocket 伺服器

啟動WebSocket 伺服器後,可以使用前端開發者常用的WebSocket 外掛工具,例如Firefox 的Simple WebSocket Client 外掛程式或Chrome 的WebSocket Client 外掛程式測試伺服器是否正常運作。

以 Firefox Simple WebSocket Client 為例,開啟外掛程式後輸入 ws://127.0.0.1:9502 點選 Connect 按鈕即可。這時候我們會發現,在伺服器端控制台輸出了輸出了 "client 1 connected" 日誌,這表示 WebSocket 用戶端已經成功連接了伺服器。

我們可以在插件的傳送區域輸入測試內容,例如輸入"hello" 然後點擊send 按鈕,就可以在控制台看到對應的"received message: hello" 日誌,說明伺服器已經成功接收了WebSocket 用戶端所傳送的訊息。

四、提高效能

在大流量場景下,WebSocket 伺服器的效能是非常關鍵的。 Swoole 提供了多種機制來提高 WebSocket 伺服器的效能。

  1. 開啟協程

透過在程式碼中呼叫SwooleCoroutineun 函數開啟協程,可以讓多個協程並發執行,提高伺服器的吞吐量。

例如,修改server.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. 設定worker 數量

在啟動伺服器的時候,可以透過設定worker 數量來提高伺服器的並發處理能力。可以透過以下方式設定 worker 個數:

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

在協程下,需要在 run 函數內才能設定 worker 數量。

  1. 使用非同步MySQL

如果WebSocket 伺服器需要操作資料庫,可以使用Swoole 的非同步MySQL 用戶端,可以避免因為資料庫操作導致的阻塞,從而提高伺服器效能。

例如,使用 Swoole 非同步 MySQL 用戶端取得一筆記錄的範例程式碼如下:

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

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

以上就是如何使用 Swoole 建立高效能的 WebSocket 伺服器的基本流程。透過使用 Swoole 提供的非同步支援、多進程、協程等優勢,可以大幅提高 WebSocket 伺服器的效能,使應用程式更加穩定且有效率。

以上是如何使用Swoole建立高效能的WebSocket伺服器的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)