blackbes / yii2-yiisockets
1.0.1
2021-07-12 06:38 UTC
Requires
- cboden/ratchet: ^0.4.2
- ratchet/pawl: ^0.3.4
- yiisoft/yii2: ~2.0.14
This package is auto-updated.
Last update: 2024-09-12 02:55:48 UTC
README
基于Ratchet的PHP Websockets与Yii2集成扩展。
安装
建议通过 Composer 安装此扩展。
- 克隆 此项目到任意目录。在此示例中,它将位于上级目录
cd ..
git clone https://github.com/BlackBes/yii2-yiisockets.git
- 在您的项目 composer.lock 文件中添加以下行
"require": {
...
"blackbes/yii2-yiisockets": "@dev",
...
},
...
"repositories": [
...
{
"type": "path",
"url": "../yii2-yiisockets"
}
...
]
- 在项目根目录运行 composer install
composer install
- 将以下行添加到您的 config/console.php 文件中。注意 提供的模型应该是您在应用程序中进行身份验证时使用的模型。(应实现Identity接口)
'components' => [
...
'user' => [
'class' => 'yii\web\User',
'identityClass' => 'app\models\<YourModel>',
'enableAutoLogin' => true
],
...
]
-
将 SocketController.php(您可以在 此处 找到模板)添加到您的 commands 文件夹
-
将 ecosystem.config.js(您可以在 此处 找到模板)添加到您的项目 根目录
-
安装 npm
-
安装 pm2
npm i pm2 -g
后台使用
-
在您的根目录中创建 sockets 文件夹
-
添加扩展 blackbes\yiisockets\BaseController 的控制器
-
启动服务器
-
启动 pm2
BaseController 概述
扩展此控制器将提供以下方法,您可以在Websocket控制器中使用这些方法
在前端连接到Websockets
-
将 Yii2WebSockets 文件添加到您的JavaScript项目并导入它
import Yii2WebSockets from "path/to/yiisockets-core";
-
创建一个变量对象 login_credentials,具有以下属性
let login_tokens = { 'login-token': authToken, //Auth token that your identity uses to log in 'connection-type': 'user' };
-
启动WebSocket连接
let _ws = new Yii2WebSockets(login_credentials); _ws.connect(socketAddress, socketPort, socketMode, socketRoute); // Default values are // - socketAddress = 'localhost'; // - socketPort = '8088'; // - socketMode = 'ws'; // - socketRoute = '';
-
添加要监听的操作。当您的控制器使用与操作名相同的 sendToGroup() 方法时,这些操作将被触发
let actionToListenTo = 'new-message' //this is for example _ws.addAction(action, function (data) { console.log(data) //here you decide what to do with data, when it arrives });
请注意,您可以添加多个操作
在前端使用Websockets
- 使用 socketSend 方法发送请求
let actionName = 'chat/send' // chat - controller name, send - controller's action (actionSend(){}) let additionalData = {'text': "some example text"} // this property you can get in controller by using $this->getData('text') ws.socketSend(actionName, additionalData);
- 在您的 addAction 方法中处理响应