uzdevid / yii2-websocket
Yii2 Web Socket服务
1.0.5
2024-07-17 08:51 UTC
Requires
- php: >=8.1
- textalk/websocket: ^1.6.3
- workerman/workerman: ^4.1
- yiisoft/hydrator: ^1.1.0
- yiisoft/yii2: ^2.0
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类似,唯一不同的是分隔符:
。您可以在有效负载参数中指定的内容将在动作参数中获取。