- Notifications
You must be signed in to change notification settings - Fork120
PHP Client and Router Library for Autobahn and WAMP (Web Application Messaging Protocol) for Real-Time Application Messaging
License
voryx/Thruway
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Thruway is an open source client and router implementation ofWAMP (Web Application Messaging Protocol), for PHP. Thruway uses an event-driven, non-blocking I/O model (reactphp), perfect for modern real-time applications.
Basic Specread more
- Publish and Subscribe
- Remote Procedure Calls
- Websocket Transport
- Internal Transport*
- JSON serialization
Advanced Specread more
- RawSocket Transport
- Authentication
- WAMP Challenge-Response Authentication
- Custom Authentication Methods
- Authorization
- Publish & Subscribe
- Subscriber Black and Whitelisting
- Publisher Exclusion
- Publisher Identification
- Subscriber Meta Events
- Event History*
- Subscription Matching
- Prefix matching
- Remote Procedure Calls
- Caller Identification
- Progressive Call Results
- Distributed Registrations & Calls*
- Caller Exclusion
- Canceling Calls
*Thruway specific features
Thruway is only supported on PHP 5.6 and up.
Create a directory for the test project
$ mkdir thruway
Switch to the new directory
$ cd thruway
Download Composermore info
$ curl -sS https://getcomposer.org/installer | php
Download Thruway and dependencies
$ php composer.phar require voryx/thruway
If you're going to also use the Thruway Client install a client transport. You'll need this to run the examples
$ php composer.phar require thruway/pawl-transport
Start the WAMP router
$ php vendor/voryx/thruway/Examples/SimpleWsRouter.php
Thruway is now running on 127.0.0.1 port 9090
<?phprequire__DIR__ .'/vendor/autoload.php';useThruway\ClientSession;useThruway\Peer\Client;useThruway\Transport\PawlTransportProvider;$client =newClient("realm1");$client->addTransportProvider(newPawlTransportProvider("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 failedecho"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();
You can also useAutobahnJS or any other WAMPv2 compatible client.
Here are some [examples] (https://github.com/tavendo/AutobahnJS#show-me-some-code)
Here's aplunker that will allow you to run some tests against a local router
For AngularJS on the frontend, use theAngular WAMP wrapper.
About
PHP Client and Router Library for Autobahn and WAMP (Web Application Messaging Protocol) for Real-Time Application Messaging