首頁 php框架 Workerman Workerman開發:如何實作WebSocket伺服器

Workerman開發:如何實作WebSocket伺服器

Nov 07, 2023 pm 03:29 PM
workerman(字) websocket(個字) 伺服器(個字)

Workerman開發:如何實作WebSocket伺服器

如何使用Workerman實現WebSocket伺服器

隨著WebRTC技術、遊戲即時通訊、線上聊天等應用的日益普及,WebSocket技術也變得越來越重要。而Workerman則是運行在PHP環境下的高效能的非同步TCP、UDP、Unix Socket網路框架,它天生支援高並發,非常適合用來開發WebSocket伺服器。

本篇文章將詳細介紹如何使用Workerman實現WebSocket伺服器,包括如何處理WebSocket連接、如何發送和接收WebSocket訊息以及如何進行框架與其他程式庫的整合等方面。文章的最後也提供了一個完整的範例程式碼。

  1. 安裝Workerman

在開始使用Workerman之前,需要先安裝它。可以透過Composer進行安裝,也可以直接從GitHub下載原始碼並手動安裝。這裡我們以Composer安裝為例:

composer require workerman/workerman
登入後複製
登入後複製
  1. 編寫WebSocket伺服器程式碼

在使用Workerman實作WebSocket伺服器之前,需要先了解WebSocket協定的工作原理。 WebSocket是一種全雙工、長連接的協議,客戶端和伺服器之間透過握手建立連接,之後可以互相傳送訊息。 WebSocket訊息可以是文字、二進位甚至是檔案等任意數據,伺服器可以根據訊息類型進行不同的處理。

使用Workerman實作WebSocket伺服器非常簡單,只需要幾行程式碼即可完成。以下是範例:

require_once __DIR__ . '/vendor/autoload.php';
use WorkermanWorker;

// 创建一个Worker监听8090端口,使用websocket协议通讯
$wsWorker = new Worker("websocket://0.0.0.0:8090");

// 启动4个进程对外提供服务
$wsWorker->count = 4;

// 处理WebSocket连接的回调函数
$wsWorker->onConnect = function($connection) {
    echo "New connection
";
};

// 处理WebSocket消息的回调函数
$wsWorker->onMessage = function($connection, $data) {
    // 处理消息...
};

// 启动Worker
Worker::runAll();
登入後複製

首先,我們建立一個Worker實例,並指定它監聽埠8090,使用websocket協定通訊。然後設定啟動4個進程,用於處理大量並發連線。 Worker支援TCP、UDP、Unix Socket等多種傳輸協議,因此我們需要指定WebSocket協定。

在這個範例中,我們只定義了兩個回呼函數:

  1. 當有新的WebSocket連線建立時,onConnect回呼函數將會被調用,我們可以在這裡記錄日誌、統計線上使用者等操作。
  2. 當收到WebSocket訊息時,onMessage回呼函數將被調用,我們需要在這裡處理訊息,例如進行簡單的計算、發送回應等操作。
  3. 最後一步是啟動Worker,它將開始監聽指定連接埠並處理WebSocket連線和訊息。
  4. WebSocket訊息的處理

透過onMessage回呼函數,我們可以接收到客戶端發送的WebSocket訊息,資料格式可以是文字或二進位。處理WebSocket訊息的方式取決於應用程式場景,例如線上聊天應用程式可能需要實現廣播、點對點聊天等功能,而遊戲應用需要實現微秒級的即時通訊。

下面是一個簡單範例,它可以將接收到的訊息列印出來並回覆給客戶端:

$wsWorker->onMessage = function($connection, $data) {
    echo "Received message: {$data}
";
    $connection->send("Received: {$data}");
};
登入後複製

WebSocket連線的狀態

在WebSocket連線建立後,客戶端和伺服器之間的連線會保持開啟。透過onClose回呼函數,我們可以處理連接斷開的事件:

$wsWorker->onClose = function($connection) {
    echo "Connection closed
";
};
登入後複製
  1. 整合框架

Workerman可以非常方便地與其他框架整合。這裡我們以Laravel框架為例,介紹如何在Laravel使用Workerman實作WebSocket伺服器。

首先,我們需要在Laravel專案中安裝Workerman:

composer require workerman/workerman
登入後複製
登入後複製

接下來,我們可以建立一個自訂Artisan指令來啟動WebSocket伺服器:

php artisan make:command WebSocketServer
登入後複製

然後在app /Console/Commands/WebSocketServer.php檔案中編寫程式碼:

<?php

namespace AppConsoleCommands;

use IlluminateConsoleCommand;
use WorkermanWorker;

class WebSocketServer extends Command {
    // 命令名称
    protected $name = 'websocket:server';

    // 命令描述
    protected $description = 'Start WebSocket server';

    // 执行命令
    public function handle() {
        // 创建Worker实例,监听8080端口
        $wsWorker = new Worker("websocket://0.0.0.0:8080");

        // 进程数量
        $wsWorker->count = 4;

        // 处理连接事件
        $wsWorker->onConnect = function($connection) {
            echo "New connection
";
        };

        // 处理消息事件
        $wsWorker->onMessage = function($connection, $data) {
            // 处理消息
        };

        // 运行Worker
        Worker::runAll();
    }
}
登入後複製

最後,我們可以透過以下指令來啟動WebSocket伺服器:

php artisan websocket:server
登入後複製

可以看到,使用Workerman實作WebSocket伺服器非常簡單,並且可以輕鬆整合到其他框架中。

  1. 完整程式碼範例

以下是一個完整的WebSocket伺服器範例,它可以接收客戶端發送來的訊息並進行簡單的處理,並將處理結果回复給客戶端:

count = 4;

// 处理WebSocket连接的回调函数
$wsWorker->onConnect = function($connection) {
    echo "New connection
";
};

// 处理WebSocket消息的回调函数
$wsWorker->onMessage = function($connection, $data) {
    echo "Received message: {$data}
";
    $result = "Received: {$data}";
    $connection->send($result);
};

// 处理连接断开事件的回调函数
$wsWorker->onClose = function($connection) {
    echo "Connection closed
";
};

// 启动Worker
Worker::runAll();
登入後複製

以上就是使用Workerman實現WebSocket伺服器的全部內容,透過這篇文章的介紹,相信讀者們已經掌握了相關的技術知識,同時也可以在實際專案中使用這些技巧進行開發了。

以上是Workerman開發:如何實作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)