uzdevid/yii2-websocket

Yii2 Web Socket服务

1.0.5 2024-07-17 08:51 UTC

This package is auto-updated.

Last update: 2024-09-17 09:25:32 UTC


README

Yii2 WebSocket应用程序是Yii2框架的一个强大且灵活的扩展,允许开发者将WebSocket服务器集成到他们的应用中。该扩展基于workerman/workerman包构建,非常适合创建需要与服务器保持持久连接的实时功能,如聊天、通知、在线游戏和其他交互式应用程序。

安装

composer require uzdevid/yii2-websocket

使用

应用程序配置与默认应用程序类似。

创建配置文件 <project_root>/socket/config/main.php

use UzDevid\WebSocket\Server\WebSocketServer;

$params = array_merge(
    require __DIR__ . '/../../common/config/params.php',
    require __DIR__ . '/params.php',
);

return [
    'id' => 'web-socket-app',
    'basePath' => dirname(__DIR__),
    'controllerNamespace' => 'socket\\controllers',
    'webSocketServer' => [
        'class' => WebSocketServer::class,
        'host' => '0.0.0.0',
        'port' => 8080,
        'count' => 1
    ],
    'components' => [],
    'params' => $params,
];

当前设置下,WebSocket服务器将监听于0.0.0.0:8080。工作进程数量:1

消息处理通过控制器和动作进行。创建<project-root>/socket/EchoController控制器。

namespace socket\controllers;

use UzDevid\WebSocket\Controller;
use UzDevid\WebSocket\Server\Dto\Client;

class EchoController extends Controller {
    /**
     * @param Client $client
     * @param array $payload
     * @return void
     */
    public function actionEcho(Client $client, array $payload): void {
        $client->user->send('echo:echo', ['currentTime' => time()]);
    }
}

创建入口文件名为<project_root>/run

#!/usr/bin/env php
/**
 * Yii WebSocket bootstrap file.
 */
use UzDevid\WebSocket\Application;

require __DIR__ . '/vendor/autoload.php';
require __DIR__ . '/vendor/yiisoft/yii2/Yii.php';
require __DIR__ . '/common/сonfig/bootstrap.php';
require __DIR__ . '/socket/сonfig/bootstrap.php';

$config = yii\helpers\ArrayHelper::merge(
    require __DIR__ . '/common/сonfig/main.php',
    require __DIR__ . '/socket/сonfig/main.php',
);

$application = new Application($config);
$application->run();

要启动服务器,需要运行以下命令

php <project_root>/run start

为了测试,我们可以使用Postman程序。您需要创建一个WebSocket连接。您需要使用在应用程序配置中指定的端口号ws://0.0.0.0:8080创建WebSocket连接。

消息体格式。

{
  "method": "echo:echo",
  "payload": {}
}

method参数与普通URL类似,唯一不同的是分隔符:。您可以在有效负载参数中指定的内容将在动作参数中获取。