schere软件/cake-websocket

CakePHP的Websocket插件

v2.1.0 2022-06-29 13:36 UTC

This package is auto-updated.

Last update: 2024-08-29 04:37:01 UTC


README

CakePHP 3 Websocket  Plugin

Build Status License Latest Stable Version Latest Unstable Version Monthly Downloads

简介

此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表以存储所有活动连接