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

如何使用Swoole建立高效能的WebSocket伺服器

Jun 13, 2023 pm 11:59 PM
websocket 高效能 swoole

近年來,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

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

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

PHP和WebSocket: 實現即時資料傳輸的最佳實踐方法 PHP和WebSocket: 實現即時資料傳輸的最佳實踐方法 Dec 18, 2023 pm 02:10 PM

PHP和WebSocket:實現即時資料傳輸的最佳實踐方法引言:在Web應用程式開發中,即時資料傳輸是一項非常重要的技術需求。傳統的HTTP協定是一種請求-回應模式的協議,不能有效地實現即時資料傳輸。為了滿足即時資料傳輸的需求,WebSocket協定應運而生。 WebSocket是一種全雙工通訊協議,它提供了一種在單一TCP連接上進行全雙工通訊的方式。相比於H

swoole協程如何在laravel使用 swoole協程如何在laravel使用 Apr 09, 2024 pm 06:48 PM

Laravel 中使用 Swoole 協程可以並發處理大量請求,優點包括:同時處理:允許同時處理多個請求。高效能:基於 Linux epoll 事件機制,高效處理請求。低資源消耗:所需伺服器資源更少。易於整合:與 Laravel 框架無縫集成,使用簡單。

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

在本文中,我們將比較伺服器發送事件(SSE)和 WebSocket,兩者都是用於傳遞資料的可靠方法。我們將在八個方面對它們進行分析,包括通訊方向、底層協定、安全性、易用性、效能、訊息結構、易用性和測試工具。這些方面的比較總結如下:類別伺服器發送事件(SSE)WebSocket通訊方向單向雙向底層協定HTTPWebSocket 協定安全性與HTTP 相同存在安全漏洞易用性設定簡單設定複雜效能訊息傳送速度快受訊息處理和連線管理影響訊息結構純文字文字或二進位易用性廣泛可用對WebSocket 整合有

golang WebSocket程式設計技巧:處理並發連接 golang WebSocket程式設計技巧:處理並發連接 Dec 18, 2023 am 10:54 AM

Golang是一種功能強大的程式語言,它在WebSocket程式設計中的使用越來越受到開發者的重視。 WebSocket是一種基於TCP的協議,它允許在客戶端和伺服器之間進行雙向通訊。在本文中,我們將介紹如何使用Golang編寫高效的WebSocket伺服器,同時處理多個並發連線。在介紹技巧前,我們先來學習什麼是WebSocket。 WebSocket簡介Web

如何在golang中使用WebSocket進行檔案傳輸 如何在golang中使用WebSocket進行檔案傳輸 Dec 18, 2023 am 09:06 AM

如何在golang中使用WebSocket進行文件傳輸WebSocket是一種支援雙向通訊的網路協議,能夠在瀏覽器和伺服器之間建立持久的連線。在golang中,我們可以使用第三方函式庫gorilla/websocket來實作WebSocket功能。本文將介紹如何使用golang和gorilla/websocket函式庫來進行檔案傳輸。首先,我們需要安裝gorilla

swoole框架怎麼重啟服務 swoole框架怎麼重啟服務 Apr 09, 2024 pm 06:15 PM

若要重新啟動 Swoole 服務,請依照下列步驟操作:檢查服務狀態並取得 PID。使用 "kill -15 PID" 停止服務。使用啟動服務的相同命令重新啟動服務。

swoole_process 怎麼讓使用者切換 swoole_process 怎麼讓使用者切換 Apr 09, 2024 pm 06:21 PM

Swoole Process 中可讓使用者切換,具體操作步驟為:建立進程;設定進程使用者;啟動進程。

swoole和workerman哪個好 swoole和workerman哪個好 Apr 09, 2024 pm 07:00 PM

Swoole 和 Workerman 都是高效能 PHP 伺服器框架。 Swoole 以其非同步處理、出色的效能和可擴展性而聞名,適用於需要處理大量並發請求和高吞吐量的專案。 Workerman 提供了非同步和同步模式的靈活性,具有直覺的 API,更適合易用性和處理較低並發量的專案。

See all articles