virge / stork
Virge::Stork 是一个帮助PHP基于WebSockets的库,它提供了一个在Ratchet之上的抽象,以提供易于实现、水平可扩展的服务以及按主题订阅认证
Requires
- react/zmq: ^0.3
- virge/cli: ~4.0
- virge/core: ~2.0
- virge/events: ^3.0
- voryx/thruway: ^0.5.2
This package is not auto-updated.
Last update: 2024-09-17 09:53:54 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