当前位置: 首页> 最新文章列表> 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,为您的应用增加实时通信功能,提升用户体验。