virge/stork

Virge::Stork 是一个帮助PHP基于WebSockets的库,它提供了一个在Ratchet之上的抽象,以提供易于实现、水平可扩展的服务以及按主题订阅认证

v3.1.1 2018-07-06 23:39 UTC

README

Virge::Stork 是一组服务/组件,它围绕Thruway(https://github.com/voryx/Thruway)提供良好的包装,Thruway提供了一个水平可扩展的WebSocket架构,以及为WAMP v2提供的按主题订阅认证。

架构

Virge::Stork 提供了一个可扩展的架构,允许您独立扩展您的WebSocket服务器和Web服务器,同时还支持WebSocket服务器的负载均衡。

发布服务器

Virge::Stork 提供了一个ZMQ发布服务器。该服务器订阅所有可用的WebSocket服务器,并将每个推送通知广播到所有WebSocket服务器。

WebSocket客户端

WebSocket客户端订阅ZMQ发布服务器,当从ZMQ发布服务器接收到消息时,它将广播到所有已订阅的客户端。

认证客户端

Auth客户端处理客户端的认证及其主题订阅。

Crossbar.io或其他WAMP路由器

使用crossbar.io或其他兼容的WAMP路由器。Stork依赖于一个允许它注册两个过程的角色

io.virge.stork.auth 用于向客户端提供基本的票证认证

io.virge.stork.topic_auth 用于确定客户端是否可以订阅给定的主题

主题

主题是一个遵循以下格式的URI

version.feedName.feedId

它们在Stork中声明,并可选择附加到验证器。

use Virge\Stork;
Stork::topic('v1', 'test')
    ->verify(function($session, $topic, $feedId, &$reason) {
        return true;
    })
;

声明的主题不包括feedId,这是客户端在连接时传递的。它将被传递给验证器,并可用于确定用户是否可以订阅。

验证器

Virge::Stork 提供了具有自定义验证器回调的能力,用于初始WebSocket连接。此验证器应将 authId 设置为有效的字符串(通常是用户连接的UserId)

此 authId 将用于主题认证

Stork::authenticator(function($session, &$returnData) {
    
    if($session->ticket === 'testtest') {
        $returnData['authid'] = "1";
        return true;
    }

    return false;
});

RPC *alpha

Virge::Stork 提供了注册和调用RPC方法的能力。您从 MethodController 开始,然后注册可用的RPC方法。

请查看 examples/simple/rpc_caller.php 和 rpc_provider.php 以获取示例。

运行示例

在 examples/simple 中,您需要启动3个进程

php -f publish_server.php
php -f ws_client.php
php -f auth_client.php

您还需要启动一个crossbar.io服务器,示例配置在 examples/simple 中提供

docker run --name crossbar -p 8000:80 -e "CROSSBAR_BACKEND_SECRET=testtest" -v /abs/path/to/examples/simple/.crossbar:/app/.crossbar --entrypoint "crossbar start --cbdir /app/.crossbar" crossbario/crossbar

我们还可以在目录中启动我们的Web服务器

php -S localhost:9000

编辑 services.php 允许您配置端口和主机名。

您应该能够访问 https://:9000 并尝试连接到WebSocket。打开控制台将显示调试信息,以及任何连接错误。

然后您可以使用以下方式发送推送消息

php -f push.php