dkhru/yii2-socket-events

在客户端从服务器更新内容的最佳方式

安装: 36

依赖关系: 0

建议者: 0

安全: 0

星星: 6

关注者: 3

分支: 1

开放问题: 1

类型:yii2-extension

dev-master 2016-04-20 20:55 UTC

This package is auto-updated.

Last update: 2024-09-11 03:13:03 UTC


README

在yii2应用中向客户端发送数据的最佳方式(除websocket外)

作者

Dmitriy Khristianov (dkh)

需求

yii2, npm, node, redis

安装

通过 composer 安装此扩展是首选方式。

运行以下命令:

php composer.phar require --prefer-dist dkhru/yii2-socket-events "*"

或者在您的 composer.json 文件的 require 部分添加:

"dkhru/yii2-socket-events": "*"

配置并运行 rtserver

扩展安装完成后,进入 cd vendor/dkhru/nodejs 并安装 node 模块 npm install console-stamp express redis socket.io 为 rtserver 生成 SSL 证书。将 config.js.example 复制到 config.js

测试简单运行:在控制台运行 node rtserver.js 在 Linux 服务器上使用 rtserver.initd 中的 init 脚本示例

使用方法

在yii2中配置 SocketEvent 组件

...
'components'=>[
...
'se'=>[
            'class'=>\dkhru\socketEvents\SE::className(),
            'socketUrl'=>https://127.0.0.1:8089,
         ],
...
]
...

现在,您可以使用 RegisterSEWidget 创建由服务器驱动的小部件

简单示例

...
class RestWidget extends RegisterSEWidget
{
      public $rest;
      public function init()
      {
         if( \Yii::$app->user->isGuest )
            throw new ForbiddenHttpException();
         $this->object='user';
         $this->id=\Yii::$app->user->id;
         $restJs=<<<JS
function(data){
    if(data['rest']){
        el = $('div.rest);
        if(el.length)
            el.html(data.rest);
    }
}
JS;
         $this->handlers=[  
            'rest'=>$restJs // добавляем обработчик
         ];
         parent::init();
      }

      public function run()
      {
         parent::run();
         return Html::tag('div',$this->rest.'&#8381;',['class'=>'rest']);
      }

   }   

添加小部件到视图后,您可以从服务器更新客户端浏览器中的用户状态。

SE::emit('user',$user_id,['handler'=>'rest','data'=>['rest'=>200.00]);