PHP Client and Router Library for Autobahn and WAMP (Web Application Messaging Protocol) for Real-Time Application Messaging
PHP Other

Build Status


Thruway is an open source client and router implementation of WAMP (Web Application Messaging Protocol), for PHP. Thruway uses an event-driven, non-blocking I/O model (reactphp), perfect for modern real-time applications.

Supported WAMP Features

Basic Spec read more

  • Publish and Subscribe
  • Remote Procedure Calls
  • Websocket Transport
  • Internal Transport*
  • JSON serialization

Advanced Spec read 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.4 and up.

Quick Start with Composer

Create a directory for the test project

  $ mkdir thruway

Switch to the new directory

  $ cd thruway

Download Composer more info

  $ curl -sS | php

Download Thruway and dependencies

  $ php composer.phar require voryx/thruway

Start the WAMP router

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

Thruway is now running on port 9090

PHP Client Example


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://"));

$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";


Javascript Clients

You can also use AutobahnJS or any other WAMPv2 compatible client.

Here are some examples

Here's a plunker that will allow you to run some tests against a local router

For AngularJS on the frontend, use the Angular WAMP wrapper.