2017 © Pedro Peláez
 

library workerman

An asynchronous event driven PHP framework for easily building fast, scalable network applications.

image

walkor/workerman

An asynchronous event driven PHP framework for easily building fast, scalable network applications.

  • Friday, July 20, 2018
  • by walkor
  • Repository
  • 460 Watchers
  • 6514 Stars
  • 970 Installations
  • PHP
  • 4 Dependents
  • 0 Suggesters
  • 1784 Forks
  • 7 Open issues
  • 49 Versions
  • 10 % Grown

The README.md

Workerman

Gitter Latest Stable Version Total Downloads Monthly Downloads Daily Downloads License, (*1)

What is it

Workerman is an asynchronous event-driven PHP framework with high performance to build fast and scalable network applications. Workerman supports HTTP, Websocket, SSL and other custom protocols. Workerman supports event extension., (*2)

Requires

A POSIX compatible operating system (Linux, OSX, BSD)
POSIX and PCNTL extensions required
Event extension recommended for better performance, (*3)

Installation

composer require workerman/workerman

Documentation

https://manual.workerman.net, (*4)

Basic Usage

A websocket server

<?php

use Workerman\Worker;

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

// Create a Websocket server
$ws_worker = new Worker('websocket://0.0.0.0:2346');

// Emitted when new connection come
$ws_worker->onConnect = function ($connection) {
    echo "New connection\n";
};

// Emitted when data received
$ws_worker->onMessage = function ($connection, $data) {
    // Send hello $data
    $connection->send('Hello ' . $data);
};

// Emitted when connection closed
$ws_worker->onClose = function ($connection) {
    echo "Connection closed\n";
};

// Run worker
Worker::runAll();

An http server

use Workerman\Worker;

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

// #### http worker ####
$http_worker = new Worker('http://0.0.0.0:2345');

// 4 processes
$http_worker->count = 4;

// Emitted when data received
$http_worker->onMessage = function ($connection, $request) {
    //$request->get();
    //$request->post();
    //$request->header();
    //$request->cookie();
    //$request->session();
    //$request->uri();
    //$request->path();
    //$request->method();

    // Send data to client
    $connection->send("Hello World");
};

// Run all workers
Worker::runAll();

A tcp server

use Workerman\Worker;

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

// #### create socket and listen 1234 port ####
$tcp_worker = new Worker('tcp://0.0.0.0:1234');

// 4 processes
$tcp_worker->count = 4;

// Emitted when new connection come
$tcp_worker->onConnect = function ($connection) {
    echo "New Connection\n";
};

// Emitted when data received
$tcp_worker->onMessage = function ($connection, $data) {
    // Send data to client
    $connection->send("Hello $data \n");
};

// Emitted when connection is closed
$tcp_worker->onClose = function ($connection) {
    echo "Connection closed\n";
};

Worker::runAll();

Enable SSL

<?php

use Workerman\Worker;

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

// SSL context.
$context = [
    'ssl' => [
        'local_cert'  => '/your/path/of/server.pem',
        'local_pk'    => '/your/path/of/server.key',
        'verify_peer' => false,
    ]
];

// Create a Websocket server with ssl context.
$ws_worker = new Worker('websocket://0.0.0.0:2346', $context);

// Enable SSL. WebSocket+SSL means that Secure WebSocket (wss://). 
// The similar approaches for Https etc.
$ws_worker->transport = 'ssl';

$ws_worker->onMessage = function ($connection, $data) {
    // Send hello $data
    $connection->send('Hello ' . $data);
};

Worker::runAll();

Custom protocol

Protocols/MyTextProtocol.php, (*5)


namespace Protocols; /** * User defined protocol * Format Text+"\n" */ class MyTextProtocol { public static function input($recv_buffer) { // Find the position of the first occurrence of "\n" $pos = strpos($recv_buffer, "\n"); // Not a complete package. Return 0 because the length of package can not be calculated if ($pos === false) { return 0; } // Return length of the package return $pos + 1; } public static function decode($recv_buffer) { return trim($recv_buffer); } public static function encode($data) { return $data . "\n"; } }
use Workerman\Worker;

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

// #### MyTextProtocol worker ####
$text_worker = new Worker('MyTextProtocol://0.0.0.0:5678');

$text_worker->onConnect = function ($connection) {
    echo "New connection\n";
};

$text_worker->onMessage = function ($connection, $data) {
    // Send data to client
    $connection->send("Hello world\n");
};

$text_worker->onClose = function ($connection) {
    echo "Connection closed\n";
};

// Run all workers
Worker::runAll();

Timer


use Workerman\Worker; use Workerman\Timer; require_once __DIR__ . '/vendor/autoload.php'; $task = new Worker(); $task->onWorkerStart = function ($task) { // 2.5 seconds $time_interval = 2.5; $timer_id = Timer::add($time_interval, function () { echo "Timer run\n"; }); }; // Run all workers Worker::runAll();

AsyncTcpConnection (tcp/ws/text/frame etc...)


use Workerman\Worker; use Workerman\Connection\AsyncTcpConnection; require_once __DIR__ . '/vendor/autoload.php'; $worker = new Worker(); $worker->onWorkerStart = function () { // Websocket protocol for client. $ws_connection = new AsyncTcpConnection('ws://echo.websocket.org:80'); $ws_connection->onConnect = function ($connection) { $connection->send('Hello'); }; $ws_connection->onMessage = function ($connection, $data) { echo "Recv: $data\n"; }; $ws_connection->onError = function ($connection, $code, $msg) { echo "Error: $msg\n"; }; $ws_connection->onClose = function ($connection) { echo "Connection closed\n"; }; $ws_connection->connect(); }; Worker::runAll();

Use HTTP proxy

<?php

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

use Workerman\Connection\AsyncTcpConnection;
$worker = new \Workerman\Worker();
$worker->onWorkerStart = function($worker){
    echo '开始链接' . PHP_EOL;
    $url = 'ws://stream.binance.com:9443/ws';
    $con = new AsyncTcpConnection($url);
    $con->transport = 'ssl';
//    $con->proxySocks5 = '127.0.0.1:1080';
    $con->proxyHttp = '127.0.0.1:25378';

    $con->onConnect = function(AsyncTcpConnection $con) {
        $ww = [
            'id' => 1,
            'method' => 'SUBSCRIBE',
            'params' => [
                "btcusdt@aggTrade",
                "btcusdt@depth"
            ]
        ];
        echo '链接成功';
        $con->send(json_encode($ww));
        echo 'ok';
    };

    $con->onMessage = function(AsyncTcpConnection $con, $data) {
        echo $data;
    };

    $con->onClose = function (AsyncTcpConnection $con) {
        echo 'onClose' . PHP_EOL;
    };

    $con->onError = function (AsyncTcpConnection $con, $code, $msg) {
        echo "error [ $code ] $msg\n";
    };

    $con->connect();
};
\Workerman\Worker::runAll();

Use Socks5 proxy

<?php

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

use Workerman\Connection\AsyncTcpConnection;
$worker = new \Workerman\Worker();
$worker->onWorkerStart = function($worker){
    echo '开始链接' . PHP_EOL;
    $url = 'ws://stream.binance.com:9443/ws';
    $con = new AsyncTcpConnection($url);
    $con->transport = 'ssl';
    $con->proxySocks5 = '127.0.0.1:1080';
//    $con->proxyHttp = '127.0.0.1:25378';

    $con->onConnect = function(AsyncTcpConnection $con) {
        $ww = [
            'id' => 1,
            'method' => 'SUBSCRIBE',
            'params' => [
                "btcusdt@aggTrade",
                "btcusdt@depth"
            ]
        ];
        echo '链接成功';
        $con->send(json_encode($ww));
        echo 'ok';
    };

    $con->onMessage = function(AsyncTcpConnection $con, $data) {
        echo $data;
    };

    $con->onClose = function (AsyncTcpConnection $con) {
        echo 'onClose' . PHP_EOL;
    };

    $con->onError = function (AsyncTcpConnection $con, $code, $msg) {
        echo "error [ $code ] $msg\n";
    };

    $con->connect();
};
\Workerman\Worker::runAll();

proxy supports TLS1.3, no Sniproxy channel, (*6)

Available commands

php start.php start
php start.php start -d
php start.php status
php start.php status -d
php start.php connections
php start.php stop
php start.php stop -g
php start.php restart
php start.php reload
php start.php reload -g, (*7)

Benchmarks

https://www.techempower.com/benchmarks/#section=data-r19&hw=ph&test=plaintext&l=zik073-1r, (*8)

webman
AdapterMan, (*9)

PayPal, (*10)

LICENSE

Workerman is released under the MIT license., (*11)

The Versions

20/07 2018

dev-master

9999999-dev http://www.workerman.net

An asynchronous event driven PHP framework for easily building fast, scalable network applications.

  Sources   Download

MIT

The Requires

  • php >=5.3

 

asynchronous event-loop

16/07 2018

v3.5.13

3.5.13.0 http://www.workerman.net

An asynchronous event driven PHP framework for easily building fast, scalable network applications.

  Sources   Download

MIT

The Requires

  • php >=5.3

 

asynchronous event-loop

05/07 2018

v3.5.12

3.5.12.0 http://www.workerman.net

An asynchronous event driven PHP framework for easily building fast, scalable network applications.

  Sources   Download

MIT

The Requires

  • php >=5.3

 

asynchronous event-loop

07/06 2018

v3.5.11

3.5.11.0 http://www.workerman.net

An asynchronous event driven PHP framework for easily building fast, scalable network applications.

  Sources   Download

MIT

The Requires

  • php >=5.3

 

asynchronous event-loop

04/06 2018

v3.5.10

3.5.10.0 http://www.workerman.net

An asynchronous event driven PHP framework for easily building fast, scalable network applications.

  Sources   Download

MIT

The Requires

  • php >=5.3

 

asynchronous event-loop

29/05 2018

v3.5.9

3.5.9.0 http://www.workerman.net

An asynchronous event driven PHP framework for easily building fast, scalable network applications.

  Sources   Download

MIT

The Requires

  • php >=5.3

 

asynchronous event-loop

23/05 2018

v3.5.8

3.5.8.0 http://www.workerman.net

An asynchronous event driven PHP framework for easily building fast, scalable network applications.

  Sources   Download

MIT

The Requires

  • php >=5.3

 

asynchronous event-loop

22/05 2018

v3.5.7

3.5.7.0 http://www.workerman.net

An asynchronous event driven PHP framework for easily building fast, scalable network applications.

  Sources   Download

MIT

The Requires

  • php >=5.3

 

asynchronous event-loop

11/04 2018

v3.5.6

3.5.6.0 http://www.workerman.net

An asynchronous event driven PHP framework for easily building fast, scalable network applications.

  Sources   Download

MIT

The Requires

  • php >=5.3

 

asynchronous event-loop

03/04 2018

v3.5.5

3.5.5.0 http://www.workerman.net

An asynchronous event driven PHP framework for easily building fast, scalable network applications.

  Sources   Download

MIT

The Requires

  • php >=5.3

 

asynchronous event-loop

06/12 2017

v3.5.4

3.5.4.0 http://www.workerman.net

An asynchronous event driven PHP framework for easily building fast, scalable network applications.

  Sources   Download

MIT

The Requires

  • php >=5.3

 

asynchronous event-loop

04/12 2017

v3.5.3

3.5.3.0 http://www.workerman.net

An asynchronous event driven PHP framework for easily building fast, scalable network applications.

  Sources   Download

MIT

The Requires

  • php >=5.3
  • ext-pcntl *
  • ext-posix *

 

asynchronous event-loop

01/11 2017

v3.5.2

3.5.2.0 http://www.workerman.net

An asynchronous event driven PHP framework for easily building fast, scalable network applications.

  Sources   Download

MIT

The Requires

  • php >=5.3
  • ext-pcntl *
  • ext-posix *

 

asynchronous event-loop

25/08 2017

v3.5.1

3.5.1.0 http://www.workerman.net

An asynchronous event driven PHP framework for easily building fast, scalable network applications.

  Sources   Download

MIT

The Requires

  • php >=5.3
  • ext-pcntl *
  • ext-posix *

 

asynchronous event-loop

23/08 2017

v3.5.0

3.5.0.0 http://www.workerman.net

An asynchronous event driven PHP framework for easily building fast, scalable network applications.

  Sources   Download

MIT

The Requires

  • php >=5.3
  • ext-pcntl *
  • ext-posix *

 

asynchronous event-loop

08/08 2017

v3.4.7

3.4.7.0 http://www.workerman.net

An asynchronous event driven PHP framework for easily building fast, scalable network applications.

  Sources   Download

MIT

The Requires

  • php >=5.3
  • ext-pcntl *
  • ext-posix *

 

asynchronous event-loop

24/07 2017

v3.4.6

3.4.6.0 http://www.workerman.net

An asynchronous event driven PHP framework for easily building fast, scalable network applications.

  Sources   Download

MIT

The Requires

  • php >=5.3
  • ext-pcntl *
  • ext-posix *

 

asynchronous event-loop

14/07 2017

v3.4.5

3.4.5.0 http://www.workerman.net

An asynchronous event driven PHP framework for easily building fast, scalable network applications.

  Sources   Download

MIT

The Requires

  • php >=5.3

 

asynchronous event-loop

06/07 2017

v3.4.4

3.4.4.0 http://www.workerman.net

An asynchronous event driven PHP framework for easily building fast, scalable network applications.

  Sources   Download

MIT

The Requires

  • php >=5.3

 

asynchronous event-loop

20/06 2017

v3.4.3

3.4.3.0 http://www.workerman.net

An asynchronous event driven PHP framework for easily building fast, scalable network applications.

  Sources   Download

MIT

The Requires

  • php >=5.3

 

asynchronous event-loop

04/05 2017

v3.4.2

3.4.2.0 http://www.workerman.net

An asynchronous event driven PHP framework for easily building fast, scalable network applications.

  Sources   Download

MIT

The Requires

  • php >=5.3

 

asynchronous event-loop

21/04 2017

v3.4.1

3.4.1.0 http://www.workerman.net

An asynchronous event driven PHP framework for easily building fast, scalable network applications.

  Sources   Download

MIT

The Requires

  • php >=5.3

 

asynchronous event-loop

15/04 2017

v3.4.0

3.4.0.0 http://www.workerman.net

An asynchronous event driven PHP framework for easily building fast, scalable network applications.

  Sources   Download

MIT

The Requires

  • php >=5.3

 

asynchronous event-loop

14/02 2017

v3.3.9

3.3.9.0 http://www.workerman.net

An asynchronous event driven PHP framework for easily building fast, scalable network applications.

  Sources   Download

MIT

The Requires

  • php >=5.3

 

asynchronous event-loop

09/02 2017

v3.3.8

3.3.8.0 http://www.workerman.net

An asynchronous event driven PHP framework for easily building fast, scalable network applications.

  Sources   Download

MIT

The Requires

  • php >=5.3

 

asynchronous event-loop

02/02 2017

v3.3.7

3.3.7.0 http://www.workerman.net

An asynchronous event driven PHP framework for easily building fast, scalable network applications.

  Sources   Download

MIT

The Requires

  • php >=5.3

 

asynchronous event-loop

22/12 2016

v3.3.6

3.3.6.0 http://www.workerman.net

An asynchronous event driven PHP framework for easily building fast, scalable network applications.

  Sources   Download

MIT

The Requires

  • php >=5.3

 

asynchronous event-loop

23/11 2016

v3.3.5

3.3.5.0 http://www.workerman.net

An asynchronous event driven PHP framework for easily building fast, scalable network applications.

  Sources   Download

MIT

The Requires

  • php >=5.3

 

asynchronous event-loop

19/09 2016

v3.3.4

3.3.4.0 http://www.workerman.net

An asynchronous event driven PHP framework for easily building fast, scalable network applications.

  Sources   Download

MIT

The Requires

  • php >=5.3

 

asynchronous event-loop

01/07 2016

v3.3.3

3.3.3.0 http://www.workerman.net

An asynchronous event driven PHP framework for easily building fast, scalable network applications.

  Sources   Download

MIT

The Requires

  • php >=5.3

 

asynchronous event-loop

25/03 2016

v3.3.1

3.3.1.0 http://www.workerman.net

An asynchronous event driven PHP framework for easily building fast, scalable network applications.

  Sources   Download

MIT

The Requires

  • php >=5.3

 

asynchronous event-loop

25/02 2016

v3.3.0

3.3.0.0 http://www.workerman.net

An asynchronous event driven PHP framework for easily building fast, scalable network applications.

  Sources   Download

MIT

The Requires

  • php >=5.3

 

asynchronous event-loop

23/02 2016

v3.2.9

3.2.9.0 http://www.workerman.net

An asynchronous event driven PHP framework for easily building fast, scalable network applications.

  Sources   Download

MIT

The Requires

  • php >=5.3

 

asynchronous event-loop

25/01 2016

v3.2.8

3.2.8.0 http://www.workerman.net

An asynchronous event driven PHP framework for easily building fast, scalable network applications.

  Sources   Download

MIT

The Requires

  • php >=5.3

 

asynchronous event-loop

13/01 2016

v3.2.7

3.2.7.0 http://www.workerman.net

An asynchronous event driven PHP framework for easily building fast, scalable network applications.

  Sources   Download

MIT

The Requires

  • php >=5.3

 

asynchronous event-loop

04/01 2016

v3.2.6

3.2.6.0 http://www.workerman.net

An asynchronous event driven PHP framework for easily building fast, scalable network applications.

  Sources   Download

MIT

The Requires

  • php >=5.3

 

asynchronous event-loop

10/12 2015

v3.2.5

3.2.5.0 http://www.workerman.net

An asynchronous event driven PHP framework for easily building fast, scalable network applications.

  Sources   Download

MIT

The Requires

  • php >=5.3

 

asynchronous event-loop

22/10 2015

v3.2.2

3.2.2.0 http://www.workerman.net

An asynchronous event driven PHP framework for easily building fast, scalable network applications.

  Sources   Download

MIT

The Requires

  • php >=5.3
  • ext-sockets *

 

asynchronous event-loop

12/10 2015

v3.2.0

3.2.0.0 http://www.workerman.net

An asynchronous event driven PHP framework for easily building fast, scalable network applications.

  Sources   Download

MIT

The Requires

  • php >=5.3
  • ext-sockets *

 

asynchronous event-loop

09/09 2015

v3.1.9

3.1.9.0 http://www.workerman.net

An asynchronous event driven PHP framework for easily building fast, scalable network applications.

  Sources   Download

MIT

The Requires

  • php >=5.3
  • ext-sockets *

 

asynchronous event-loop

28/07 2015

v3.1.8

3.1.8.0 http://www.workerman.net

An asynchronous event driven PHP framework for easily building fast, scalable network applications.

  Sources   Download

MIT

The Requires

  • php >=5.3
  • ext-sockets *

 

asynchronous event-loop

15/06 2015

v3.1.7

3.1.7.0 http://www.workerman.net

An asynchronous event driven PHP framework for easily building fast, scalable network applications.

  Sources   Download

MIT

The Requires

  • php >=5.3
  • ext-sockets *

 

asynchronous event-loop

25/05 2015

v3.1.6

3.1.6.0 http://www.workerman.net

An asynchronous event driven PHP framework for easily building fast, scalable network applications.

  Sources   Download

MIT

The Requires

  • php >=5.3
  • ext-sockets *

 

asynchronous event-loop

20/05 2015

v3.1.5

3.1.5.0 http://www.workerman.net

High performance Socket server framework for network applications implemented in PHP using libevent

  Sources   Download

MIT

The Requires

  • php >=5.3
  • ext-sockets *

 

workerman

25/04 2015

v3.1.4

3.1.4.0 http://www.workerman.net

High performance Socket server framework for network applications implemented in PHP using libevent

  Sources   Download

MIT

The Requires

  • php >=5.3
  • ext-sockets *

 

workerman

13/04 2015

v3.1.3

3.1.3.0 http://www.workerman.net

High performance Socket server framework for network applications implemented in PHP using libevent

  Sources   Download

MIT

The Requires

  • php >=5.3
  • ext-sockets *

 

workerman

11/04 2015

v3.1.2

3.1.2.0 http://www.workerman.net

High performance Socket server framework for network applications implemented in PHP using libevent

  Sources   Download

MIT

The Requires

  • php >=5.3
  • ext-sockets *

 

workerman

09/04 2015

v3.1.1

3.1.1.0 http://www.workerman.net

High performance Socket server framework for network applications implemented in PHP using libevent

  Sources   Download

MIT

The Requires

  • php >=5.3
  • ext-sockets *

 

workerman

30/01 2015

v2.1.6

2.1.6.0 http://www.workerman.net

High performance Socket server framework for network applications implemented in PHP using libevent

  Sources   Download

MIT

The Requires

  • php >=5.3
  • ext-pcntl *
  • ext-shmop *
  • ext-sockets *

 

workerman