dkhru / yii2-socket-events
在客户端从服务器更新内容的最佳方式
dev-master
2016-04-20 20:55 UTC
Requires
- yiisoft/yii2: *
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.'₽',['class'=>'rest']);
}
}
添加小部件到视图后,您可以从服务器更新客户端浏览器中的用户状态。
SE::emit('user',$user_id,['handler'=>'rest','data'=>['rest'=>200.00]);