2017 © Pedro Peláez
 

project workerman

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

image

zyuyou/workerman

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

  • Wednesday, May 6, 2015
  • by zyuyou
  • Repository
  • 1 Watchers
  • 0 Stars
  • 7 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 1777 Forks
  • 0 Open issues
  • 6 Versions
  • 0 % Grown

The README.md

Workerman 3.0

文档: http://doc3.workerman.net, (*1)

Documentation:https://github.com/walkor/workerman-manual, (*2)

Home page:http://www.workerman.net, (*3)

What is it

Workerman is a library for event-driven programming in PHP. It has a huge number of features. Each worker is able to handle thousands of connections., (*4)

Usage

A tcp server

test.php, (*5)

require_once './Workerman/Autoloader.php';
use Workerman\Worker;

// #### create socket and listen 1234 port ####
$tcp_worker = new Worker("tcp://0.0.0.0:1234");
//create 4 hello_worker processes
$tcp_worker->count = 4;
// when client send data to 1234 port
$tcp_worker->onMessage = function($connection, $data)
{
    // send data to client
    $connection->send("hello $data \n");
};

Worker::runAll();

A http server

test.php, (*6)

require_once './Workerman/Autoloader.php';
use Workerman\Worker;

// #### http worker ####
$http_worker = new Worker("http://0.0.0.0:2345");
$http_worker->count = 4;
$http_worker->onMessage = function($connection, $data)
{
    // send data to client
    $connection->send("hello world \n");
};

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

A websocket server

test.php, (*7)

require_once './Workerman/Autoloader.php';
use Workerman\Worker
// #### websocket worker ####
$ws_worker = new Worker("websocket://0.0.0.0:5678");
$ws_worker->onMessage =  function($connection, $data)
{
    // send data to client
    $connection->send("hello world \n");
};

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

User defined protocol

Protocols/MyTextProtocol.php, (*8)

/**
 * 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";
    }
}

test.php, (*9)

require_once './Workerman/Autoloader.php';
use Workerman\Worker
// #### MyTextProtocol worker ####
$text_worker = new Worker("MyTextProtocol://0.0.0.0:5678");
$text_worker->onMessage =  function($connection, $data)
{
    // send data to client
    $connection->send("hello world \n");
};

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

A WebServer

test.php, (*10)

require_once './Workerman/Autoloader.php';
use \Workerman\WebServer;
// WebServer
$web = new WebServer("http://0.0.0.0:8686");
$web->count = 2;
$web->addRoot('www.your_domain.com', __DIR__.'/Web');
// run all workers
Worker::runAll();

Timer

test.php, (*11)

require_once './Workerman/Autoloader.php';
use Workerman\Worker;
use Workerman\Lib\Timer;

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

run width, (*12)

php test.php start, (*13)

Available commands

php test.php start
php test.php start -d
workerman start
php test.php status
workerman satus php test.php stop
php test.php restart
php test.php reload, (*14)

Benchmarks

CPU:      Intel(R) Core(TM) i3-3220 CPU @ 3.30GHz and 4 processors totally
Memory:   8G
OS:       Ubuntu 14.04 LTS
Software: ab
PHP:      5.5.9

Codes, (*15)

<?php
use Workerman\Worker;
$worker = new Worker('tcp://0.0.0.0:1234');
$worker->count=3;
$worker->onMessage = function($connection, $data)
{
    $connection->send("HTTP/1.1 200 OK\r\nConnection: keep-alive\r\nServer: workerman\1.1.4\r\n\r\nhello");
};
Worker::runAll();

Result, (*16)

ab -n1000000 -c100 -k http://127.0.0.1:1234/
This is ApacheBench, Version 2.3 <$Revision: 1528965 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 127.0.0.1 (be patient)
Completed 100000 requests
Completed 200000 requests
Completed 300000 requests
Completed 400000 requests
Completed 500000 requests
Completed 600000 requests
Completed 700000 requests
Completed 800000 requests
Completed 900000 requests
Completed 1000000 requests
Finished 1000000 requests


Server Software:        workerman/3.1.4
Server Hostname:        127.0.0.1
Server Port:            1234

Document Path:          /
Document Length:        5 bytes

Concurrency Level:      100
Time taken for tests:   7.240 seconds
Complete requests:      1000000
Failed requests:        0
Keep-Alive requests:    1000000
Total transferred:      73000000 bytes
HTML transferred:       5000000 bytes
Requests per second:    138124.14 [#/sec] (mean)
Time per request:       0.724 [ms] (mean)
Time per request:       0.007 [ms] (mean, across all concurrent requests)
Transfer rate:          9846.74 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.0      0       5
Processing:     0    1   0.2      1       9
Waiting:        0    1   0.2      1       9
Total:          0    1   0.2      1       9

Percentage of the requests served within a certain time (ms)
  50%      1
  66%      1
  75%      1
  80%      1
  90%      1
  95%      1
  98%      1
  99%      1
 100%      9 (longest request)

Demos

tadpole

Live demo
Source code
workerman todpole, (*17)

BrowserQuest

Live demo
Source code
BrowserQuest width workerman, (*18)

web vmstat

Live demo
Source code
web vmstat, (*19)

live-ascii-camera

Live demo camera page
Live demo receive page
Source code
live-ascii-camera, (*20)

live-camera

Live demo camera page
Live demo receive page
Source code
live-camera, (*21)

chat room

Live demo
Source code
workerman-chat, (*22)

statistics

Live demo
Source code
workerman-statistics, (*23)

flappybird

Live demo
Source code
workerman-statistics, (*24)

jsonRpc

Source code
workerman-jsonRpc, (*25)

thriftRpc

Source code
workerman-thriftRpc, (*26)

web-msg-sender

Live demo send page
Live demo receive page
Source code
web-msg-sender, (*27)

shadowsocks-php

Source code
shadowsocks-php, (*28)

queue

Source code, (*29)

LICENSE

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

The Versions

06/05 2015

dev-master

9999999-dev 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