2017 © Pedro Peláez
 

library workerman

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

image

workerman/workerman

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

  • Friday, July 20, 2018
  • by workerman
  • Repository
  • 460 Watchers
  • 6508 Stars
  • 132,836 Installations
  • PHP
  • 79 Dependents
  • 11 Suggesters
  • 1785 Forks
  • 7 Open issues
  • 49 Versions
  • 18 % 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. It supports HTTP, WebSocket, custom protocols, coroutines, and connection pools, making it ideal for handling high-concurrency scenarios efficiently., (*2)

Requires

A POSIX compatible operating system (Linux, OSX, BSD)
POSIX and PCNTL extensions required
Event/Swoole/Swow 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();

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();

Coroutine

Coroutine is used to create coroutines, enabling the execution of asynchronous tasks to improve concurrency performance., (*5)

<?php
use Workerman\Connection\TcpConnection;
use Workerman\Coroutine;
use Workerman\Events\Swoole;
use Workerman\Protocols\Http\Request;
use Workerman\Worker;
require_once __DIR__ . '/vendor/autoload.php';

$worker = new Worker('http://0.0.0.0:8001');

$worker->eventLoop = Swoole::class; // Or Swow::class or Fiber::class

$worker->onMessage = function (TcpConnection $connection, Request $request) {
    Coroutine::create(function () {
        echo file_get_contents("http://www.example.com/event/notify");
    });
    $connection->send('ok');
};

Worker::runAll();

Note: Coroutine require Swoole extension or Swow extension or Fiber revolt/event-loop, and the same applies below, (*6)

Barrier

Barrier is used to manage concurrency and synchronization in coroutines. It allows tasks to run concurrently and waits until all tasks are completed, ensuring process synchronization., (*7)

<?php
use Workerman\Connection\TcpConnection;
use Workerman\Coroutine\Barrier;
use Workerman\Coroutine;
use Workerman\Events\Swoole;
use Workerman\Protocols\Http\Request;
use Workerman\Worker;
require_once __DIR__ . '/vendor/autoload.php';

// Http Server
$worker = new Worker('http://0.0.0.0:8001');
$worker->eventLoop = Swoole::class; // Or Swow::class or Fiber::class
$worker->onMessage = function (TcpConnection $connection, Request $request) {
    $barrier = Barrier::create();
    for ($i=1; $i<5; $i++) {
        Coroutine::create(function () use ($barrier, $i) {
            file_get_contents("http://127.0.0.1:8002?task_id=$i");
        });
    }
    // Wait all coroutine done
    Barrier::wait($barrier);
    $connection->send('All Task Done');
};

// Task Server
$task = new Worker('http://0.0.0.0:8002');
$task->onMessage = function (TcpConnection $connection, Request $request) {
    $task_id = $request->get('task_id');
    $message = "Task $task_id Done";
    echo $message . PHP_EOL;
    $connection->close($message);
};

Worker::runAll();

Parallel

Parallel executes multiple tasks concurrently and collects results. Use add to add tasks and wait to wait for completion and get results. Unlike Barrier, Parallel directly returns the results of each task., (*8)

<?php
use Workerman\Connection\TcpConnection;
use Workerman\Coroutine\Parallel;
use Workerman\Events\Swoole;
use Workerman\Protocols\Http\Request;
use Workerman\Worker;
require_once __DIR__ . '/vendor/autoload.php';

// Http Server
$worker = new Worker('http://0.0.0.0:8001');
$worker->eventLoop = Swoole::class; // Or Swow::class or Fiber::class
$worker->onMessage = function (TcpConnection $connection, Request $request) {
    $parallel = new Parallel();
    for ($i=1; $i<5; $i++) {
        $parallel->add(function () use ($i) {
            return file_get_contents("http://127.0.0.1:8002?task_id=$i");
        });
    }
    $results = $parallel->wait();
    $connection->send(json_encode($results)); // Response: ["Task 1 Done","Task 2 Done","Task 3 Done","Task 4 Done"]
};

// Task Server
$task = new Worker('http://0.0.0.0:8002');
$task->onMessage = function (TcpConnection $connection, Request $request) {
    $task_id = $request->get('task_id');
    $message = "Task $task_id Done";
    $connection->close($message);
};

Worker::runAll();

Channel

Channel is a mechanism for communication between coroutines. One coroutine can push data into the channel, while another can pop data from it, enabling synchronization and data sharing between coroutines., (*9)

<?php
use Workerman\Connection\TcpConnection;
use Workerman\Coroutine\Channel;
use Workerman\Coroutine;
use Workerman\Events\Swoole;
use Workerman\Protocols\Http\Request;
use Workerman\Worker;
require_once __DIR__ . '/vendor/autoload.php';

// Http Server
$worker = new Worker('http://0.0.0.0:8001');
$worker->eventLoop = Swoole::class; // Or Swow::class or Fiber::class
$worker->onMessage = function (TcpConnection $connection, Request $request) {
    $channel = new Channel(2);
    Coroutine::create(function () use ($channel) {
        $channel->push('Task 1 Done');
    });
    Coroutine::create(function () use ($channel) {
        $channel->push('Task 2 Done');
    });
    $result = [];
    for ($i = 0; $i < 2; $i++) {
        $result[] = $channel->pop();
    }
    $connection->send(json_encode($result)); // Response: ["Task 1 Done","Task 2 Done"]
};
Worker::runAll();

Pool

Pool is used to manage connection or resource pools, improving performance by reusing resources (e.g., database connections). It supports acquiring, returning, creating, and destroying resources., (*10)

<?php
use Workerman\Connection\TcpConnection;
use Workerman\Coroutine\Pool;
use Workerman\Events\Swoole;
use Workerman\Protocols\Http\Request;
use Workerman\Worker;
require_once __DIR__ . '/vendor/autoload.php';

class RedisPool
{
    private Pool $pool;
    public function __construct($host, $port, $max_connections = 10)
    {
        $pool = new Pool($max_connections);
        $pool->setConnectionCreator(function () use ($host, $port) {
            $redis = new \Redis();
            $redis->connect($host, $port);
            return $redis;
        });
        $pool->setConnectionCloser(function ($redis) {
            $redis->close();
        });
        $pool->setHeartbeatChecker(function ($redis) {
            $redis->ping();
        });
        $this->pool = $pool;
    }
    public function get(): \Redis
    {
        return $this->pool->get();
    }
    public function put($redis): void
    {
        $this->pool->put($redis);
    }
}

// Http Server
$worker = new Worker('http://0.0.0.0:8001');
$worker->eventLoop = Swoole::class; // Or Swow::class or Fiber::class
$worker->onMessage = function (TcpConnection $connection, Request $request) {
    static $pool;
    if (!$pool) {
        $pool = new RedisPool('127.0.0.1', 6379, 10);
    }
    $redis = $pool->get();
    $redis->set('key', 'hello');
    $value = $redis->get('key');
    $pool->put($redis);
    $connection->send($value);
};

Worker::runAll();

Pool for automatic acquisition and release

<?php
use Workerman\Connection\TcpConnection;
use Workerman\Coroutine\Context;
use Workerman\Coroutine;
use Workerman\Coroutine\Pool;
use Workerman\Events\Swoole;
use Workerman\Protocols\Http\Request;
use Workerman\Worker;
require_once __DIR__ . '/vendor/autoload.php';

class Db
{
    private static ?Pool $pool = null;
    public static function __callStatic($name, $arguments)
    {
        if (self::$pool === null) {
            self::initializePool();
        }
        // Get the connection from the coroutine context
        // to ensure the same connection is used within the same coroutine
        $pdo = Context::get('pdo');
        if (!$pdo) {
            // If no connection is retrieved, get one from the connection pool
            $pdo = self::$pool->get();
            Context::set('pdo', $pdo);
            // When the coroutine is destroyed, return the connection to the pool
            Coroutine::defer(function () use ($pdo) {
                self::$pool->put($pdo);
            });
        }
        return call_user_func_array([$pdo, $name], $arguments);
    }
    private static function initializePool(): void
    {
        self::$pool = new Pool(10);
        self::$pool->setConnectionCreator(function () {
            return new \PDO('mysql:host=127.0.0.1;dbname=your_database', 'your_username', 'your_password');
        });
        self::$pool->setConnectionCloser(function ($pdo) {
            $pdo = null;
        });
        self::$pool->setHeartbeatChecker(function ($pdo) {
            $pdo->query('SELECT 1');
        });
    }
}

// Http Server
$worker = new Worker('http://0.0.0.0:8001');
$worker->eventLoop = Swoole::class; // Or Swow::class or Fiber::class
$worker->onMessage = function (TcpConnection $connection, Request $request) {
    $value = Db::query('SELECT NOW() as now')->fetchAll();
    $connection->send(json_encode($value));
};

Worker::runAll();

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, (*11)

Benchmarks

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

Supported by

JetBrains logo., (*13)

webman
AdapterMan, (*14)

PayPal, (*15)

LICENSE

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

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