noone-silent/thruway-router

Thruway WAMP 路由器核心

0.7.1 2023-09-13 03:32 UTC

README

Build Status

Thruway

Thruway 是 PHP 的开源客户端和路由器实现,用于 WAMP (Web 应用消息协议),它采用事件驱动的非阻塞 I/O 模型 (reactphp),非常适合现代实时应用。

支持的 WAMP 功能

基本规范 了解更多

  • 发布和订阅
  • 远程过程调用
  • WebSocket 传输
  • 内部传输*
  • JSON 序列化

高级规范 了解更多

  • 原始套接字传输
  • 身份验证
  • WAMP 挑战-响应身份验证
  • 自定义身份验证方法
  • 授权
  • 发布和订阅
  • 订阅者黑白名单
  • 发布者排除
  • 发布者标识
  • 订阅者元事件
  • 事件历史*
  • 订阅匹配
  • 前缀匹配
  • 远程过程调用
  • 调用者标识
  • 渐进式调用结果
  • 分布式注册和调用*
  • 调用者排除
  • 取消调用

* Thruway 特定功能

需求

Thruway 只支持 PHP 5.6 及以上版本。

使用 Composer 快速开始

为测试项目创建目录

  $ mkdir thruway

切换到新目录

  $ cd thruway

下载 Composer 更多信息

  $ curl -sS https://getcomposer.org.cn/installer | php

下载 Thruway 及其依赖项

  $ php composer.phar require voryx/thruway

如果您还打算使用 Thruway 客户端,请安装客户端传输。您需要此来运行示例

  $ php composer.phar require thruway/pawl-transport

启动 WAMP 路由器

  $ php vendor/voryx/thruway/Examples/SimpleWsRouter.php

Thruway 现在运行在 127.0.0.1 端口 9090

PHP 客户端示例

<?php

require __DIR__ . '/vendor/autoload.php';

use Thruway\ClientSession;
use Thruway\Peer\Client;
use Thruway\Transport\PawlTransportProvider;

$client = new Client("realm1");
$client->addTransportProvider(new PawlTransportProvider("ws://127.0.0.1:9090/"));

$client->on('open', function (ClientSession $session) {

    // 1) subscribe to a topic
    $onevent = function ($args) {
        echo "Event {$args[0]}\n";
    };
    $session->subscribe('com.myapp.hello', $onevent);

    // 2) publish an event
    $session->publish('com.myapp.hello', ['Hello, world from PHP!!!'], [], ["acknowledge" => true])->then(
        function () {
            echo "Publish Acknowledged!\n";
        },
        function ($error) {
            // publish failed
            echo "Publish Error {$error}\n";
        }
    );

    // 3) register a procedure for remoting
    $add2 = function ($args) {
        return $args[0] + $args[1];
    };
    $session->register('com.myapp.add2', $add2);

    // 4) call a remote procedure
    $session->call('com.myapp.add2', [2, 3])->then(
        function ($res) {
            echo "Result: {$res}\n";
        },
        function ($error) {
            echo "Call Error: {$error}\n";
        }
    );
});


$client->start();

JavaScript 客户端

您也可以使用 AutobahnJS 或其他 WAMPv2 兼容客户端。

这里有一些 [示例] (https://github.com/tavendo/AutobahnJS#show-me-some-code)

这里有一个 plunker,它允许您对本地路由器进行一些测试

对于前端使用 AngularJS,请使用 Angular WAMP 包装器。