schere软件 / cake-websocket
CakePHP的Websocket插件
v2.1.0
2022-06-29 13:36 UTC
Requires
- php: >=7.3.0
- cakephp/cakephp: >=4.0.0
- cboden/ratchet: ^0.4.4
- josegonzalez/cakephp-queuesadilla: >=0.7
- react/event-loop: ^1.3
- react/socket: ^1.11
Requires (Dev)
README
简介
此CakePHP 3插件为您提供了将websocket功能添加到您的Web应用的一种简单方法。
主要包
要求
- CakePHP 3.3或更高版本
- PHP 7.1
4个简单步骤使用
注意:您可以在我们的CakePHP应用程序模板中查看它,以在带有预安装依赖项的干净应用程序设置中测试它。
1. 定义一个新的事件
例如,对于websocket_events.php
...
'userDataUpdated' => [
'audience' => [
'includeAllNotAuthenticated' => false,
'includeAllAuthenticated' => true
]
]
...
2. 在服务器上下文中发布事件(例如,Shell、Controller、Table...)
例如,对于UsersController.php
...
use Websocket\Lib\Websocket;
...
if ($this->Users->save($exampleUser)) {
Websocket::publishEvent('userDataUpdated', ['editedUserId' => $exampleUser->id]);
}
...
3. 让客户端接收事件并定义一个回调
例如,对于../users/index_controller.js
...
App.Websocket.onEvent('userDataUpdated', function(payload) {
if (payload.editedUserId === this.exampleUser.id) {
alert('Someone changed the data of this user!');
}
}.bind(this));
...
4. 运行websocket服务器shell并开始测试!
$ bin/cake websocket_server
安装
1. 需要插件
您可以使用composer将此插件安装到您的CakePHP应用程序中。
安装composer包的推荐方法是
composer require scherersoftware/cake-websocket
2. 加载插件
下一步是在您的bootstrap.php中正确加载插件
Plugin::load('Websocket', ['bootstrap' => true, 'routes' => true]);
3. 配置应用程序配置
-
文件:
/config/app.php
<?php ... 'Websocket' => [ 'ssl' => false, 'host' => '127.0.0.1', 'externalHost' => 'cws.dev', 'port' => 8889, 'frontendPath' => [ 'ssl' => [ 'path' => '/wss/', 'usePort' => false ], 'normal' => [ 'path' => '/', 'usePort' => true ] ], 'sessionCookieName' => 'cws', 'Queue' => [ 'name' => 'websocket', 'loopInterval' => 0.1, ] ] ...
4. 创建和配置websocket事件
-
文件:
/config/websocket_events.php
<?php return [ 'userDataUpdated' => [ 'audience' => [ 'includeAllNotAuthenticated' => false, 'includeAllAuthenticated' => true ] ] ];
5. 配置AppController.php
在您的src/Controller/AppController.php
中,插入以下代码片段
用法
use Websocket\Lib\Websocket;
beforeFilter()
...
$this->FrontendBridge->setJson('websocketFrontendConfig', Websocket::getFrontendConfig());
...
6. 在App.Websocket
下全局访问JS websocket库
- 在加载前端桥接器资产后加载文件/webroot/lib/websocket.js
7. 如果尚未完成,正确设置会话
请参阅Cake会话文档
如果需要,设置Apache SSL ProxyPass
确保激活以下模块
- mod_proxy.so
- mod_proxy_wstunnel.so
编辑您的vhosts配置,并在ssl部分添加以下内容
ProxyPass /wss/ ws://:8889/
路线图
1.1.0
- 单元测试
- 添加一个websocket_connections表以存储所有活动连接