Thruway 开源项目使用教程
1. 项目的目录结构及介绍
Thruway 项目的目录结构如下:
Thruway/
├── bin/
├── composer.json
├── composer.lock
├── examples/
├── LICENSE
├── phpunit.xml
├── README.md
├── src/
│ ├── Client/
│ ├── Connection/
│ ├── InternalClient/
│ ├── Pawl/
│ ├── Peer/
│ ├── Realm/
│ ├── Role/
│ ├── Router/
│ ├── WampError/
│ └── WampProtocol/
├── tests/
└── vendor/
目录介绍
bin/
: 包含可执行文件。composer.json
和composer.lock
: Composer 依赖管理文件。examples/
: 包含项目的示例代码。LICENSE
: 项目的许可证文件。phpunit.xml
: PHPUnit 配置文件。README.md
: 项目说明文档。src/
: 项目的源代码目录,包含多个子目录,如Client
,Connection
,Peer
等。tests/
: 包含项目的测试代码。vendor/
: Composer 自动生成的依赖包目录。
2. 项目的启动文件介绍
Thruway 项目的启动文件通常位于 examples/
目录下。例如,examples/SimpleClient.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) {
// 订阅主题
$session->subscribe('com.myapp.hello', function ($args) {
echo "Received: {$args[0]}\n";
});
});
$client->start();
启动文件介绍
require __DIR__ . '/../vendor/autoload.php';
: 引入 Composer 自动加载文件。use Thruway\ClientSession;
: 引入 Thruway 的客户端会话类。use Thruway\Peer\Client;
: 引入 Thruway 的客户端类。use Thruway\Transport\PawlTransportProvider;
: 引入 Thruway 的传输提供者类。$client = new Client("realm1");
: 创建一个新的客户端实例,指定 realm 为realm1
。$client->addTransportProvider(new PawlTransportProvider("ws://127.0.0.1:9090/"));
: 添加传输提供者,指定 WebSocket 地址。$client->on('open', function (ClientSession $session) { ... });
: 当客户端连接打开时,执行回调函数。$client->start();
: 启动客户端。
3. 项目的配置文件介绍
Thruway 项目的配置文件主要是 composer.json
,它定义了项目的依赖和其他配置信息。
{
"name": "voryx/thruway",
"description": "Thruway WAMP router core",
"keywords": ["WAMP", "WebSocket", "Autobahn", "router"],
"license": "MIT",
"require": {
"php": ">=5.4",
"react/event-loop": "0.4.*",
"react/socket": "0.4.*",
"react/socket-client": "0.4.*",
"ratchet/pawl": "0.1.*",
"voryx/event-dispatcher": "0.1.*",
"evenement/evenement": "2.0.*",
"guzzlehttp/psr7": "1.2.*"
},
"require-dev": {
"phpunit/phpunit": "4.8.*"
},
"autoload": {
"psr-4": {
"Thruway\\": "src/"
}
}
}