當前位置: 首頁> 最新文章列表> Yii2與Workerman集成實現WebSocket通信:詳細教程

Yii2與Workerman集成實現WebSocket通信:詳細教程

gitbox 2025-07-15

Yii2與Workerman集成實現WebSocket通信

Yii2是一個功能強大的PHP框架,而Workerman則是一個高性能支持異步的PHP socket框架。將這兩個框架結合使用,可以幫助開發者快速實現WebSocket通信功能。本文將通過實例介紹如何在Yii2中集成Workerman來實現WebSocket通信。

安裝Yii2

首先,您需要安裝Yii2框架。通過以下命令,您可以使用composer來安裝Yii2:

 composer create-project --prefer-dist yiisoft/yii2-app-basic basic

這條命令將會在當前目錄下創建一個名為basic的Yii2應用。

安裝Workerman

接下來,我們需要安裝Workerman。通過composer可以快速安裝:

 composer require workerman/workerman

安裝完成後,您需要創建一個名為worker.php的文件,用於啟動Workerman服務。下面是一個示例代碼:

 // worker.php
require_once __DIR__ . '/vendor/autoload.php';
use Workerman\Worker;
$worker = new Worker('websocket://0.0.0.0:8080');
$worker->onMessage = function($connection, $data) {
    // 處理接收到的消息
    $message = 'Received: ' . $data;
    // 發送消息到客戶端
    $connection->send($message);
};
Worker::runAll();

上述代碼創建了一個WebSocket服務器,監聽8080端口。當接收到消息時,會把消息原封不動地返回給客戶端。

創建Yii2控制器和視圖

接下來,在Yii2應用中,我們需要創建一個控制器來處理WebSocket請求。以下是WebSocket控制器的代碼:

 // WebSocketController.php
namespace app\controllers;
use yii\web\Controller;
class WebSocketController extends Controller
{
    public $enableCsrfValidation = false;
    public function actionIndex()
    {
        // 創建一個websocket連接
        $connection = new \Workerman\Connection\TcpConnection('websocket://127.0.0.1:8080');
        $connection->onMessage = function($connection, $message) {
            // 處理接收到的消息
            $message = 'Received: ' . $message;
            // 發送消息到客戶端
            $connection->send($message);
        };
        // 啟動websocket連接
        $connection->connect();
    }
}

在此控制器中,我們使用Workerman的TcpConnection來創建WebSocket連接,並定義了一個消息回調函數,接收到消息後將其返回。

接著,在視圖文件中,我們可以創建一個按鈕,點擊後向服務器發送消息:

 <?php
use yii\helpers\Html;
?>
<h1>WebSocket Example</h1>
<button id="sendButton">Send Message</button>
<script>
$(document).ready(function() {
    $('#sendButton').click(function() {
        var message = "Hello, server!";
        // 發送消息到服務器
        websocket.send(message);
    });
});
</script>

在這段代碼中,我們使用jQuery為按鈕綁定點擊事件,當用戶點擊按鈕時,發送一個消息到WebSocket服務器。

配置路由

為了使得Yii2應用能夠正確訪問WebSocket控制器,我們需要在配置文件中設置路由。在Yii2應用的配置文件中,找到components數組,並添加以下內容:

 'urlManager' => [
    'enablePrettyUrl' => true,
    'showScriptName' => false,
    'rules' => [
        // 添加websocket路由
        '/websocket' => 'websocket/index'
    ],
],

通過上述配置,/websocket路由將會指向我們之前創建的WebSocket控制器。

總結

通過本文的講解,您已經學會如何在Yii2框架中結合Workerman實現WebSocket通信功能。首先,您通過composer安裝了Yii2和Workerman框架;接著,您創建了一個Worker服務來處理WebSocket連接;然後,您在Yii2應用中設置了控制器和視圖,並最終通過配置路由實現了WebSocket功能的訪問。

通過這一示例,您能夠輕鬆在Yii2應用中集成Workerman,為您的應用增加實時通信功能,提升用戶體驗。