blackbes/yii2-yiisockets

安装: 0

依赖关系: 0

建议者: 0

安全性: 0

星标: 1

关注者: 3

分支: 0

公开问题: 0

类型:yii2-extension

1.0.1 2021-07-12 06:38 UTC

This package is auto-updated.

Last update: 2024-09-12 02:55:48 UTC


README

基于Ratchet的PHP Websockets与Yii2集成扩展。

安装

建议通过 Composer 安装此扩展。

  1. 克隆 此项目到任意目录。在此示例中,它将位于上级目录
    cd ..
    git clone https://github.com/BlackBes/yii2-yiisockets.git 
  1. 在您的项目 composer.lock 文件中添加以下行
    "require": {
        ...
        "blackbes/yii2-yiisockets": "@dev",
        ...
    },
    
    ...
    
    "repositories": [
        ...
        {
            "type": "path",
            "url": "../yii2-yiisockets"
        }
        ...
    ]
  1. 在项目根目录运行 composer install
    composer install
  1. 将以下行添加到您的 config/console.php 文件中。注意 提供的模型应该是您在应用程序中进行身份验证时使用的模型。(应实现Identity接口)
    'components' => [
        ...
        'user' => [
            'class' => 'yii\web\User',
            'identityClass' => 'app\models\<YourModel>',
            'enableAutoLogin' => true
        ],
        ...
    ]
  1. SocketController.php(您可以在 此处 找到模板)添加到您的 commands 文件夹

  2. ecosystem.config.js(您可以在 此处 找到模板)添加到您的项目 根目录

  3. 安装 npm

  4. 安装 pm2

    npm i pm2 -g

后台使用

  1. 在您的根目录中创建 sockets 文件夹

  2. 添加扩展 blackbes\yiisockets\BaseController 的控制器

  3. 启动服务器

  4. 启动 pm2

BaseController 概述

扩展此控制器将提供以下方法,您可以在Websocket控制器中使用这些方法

在前端连接到Websockets

  1. Yii2WebSockets 文件添加到您的JavaScript项目并导入它

       import Yii2WebSockets from "path/to/yiisockets-core";
  2. 创建一个变量对象 login_credentials,具有以下属性

         let login_tokens = {
             'login-token': authToken, //Auth token that your identity uses to log in
             'connection-type': 'user'
         };
  3. 启动WebSocket连接

        let _ws = new Yii2WebSockets(login_credentials);
    
        _ws.connect(socketAddress, socketPort, socketMode, socketRoute);
    
          // Default values are
          //   - socketAddress = 'localhost';
          //   - socketPort = '8088';
          //   - socketMode = 'ws';
          //   - socketRoute = '';
  4. 添加要监听的操作。当您的控制器使用与操作名相同的 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

  1. 使用 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);
  2. 在您的 addAction 方法中处理响应