Skip to content

一个高性能多进程 PHP socket 服务器框架,支持libevent,支持websocket、http等诸多协议。 High performance Socket server framework for network applications implemented in PHP using libevent

License

shuiguang/workerman

 
 

Repository files navigation

Workerman 3.0

Home page:http://www.workerman.net

Documentation:http://doc3.workerman.net

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.

Usage

A tcp server

test.php

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

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

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

/**
 * 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

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

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

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

php test.php start

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

Demos

Live demo
Source code
workerman todpole

Live demo
Source code
BrowserQuest width workerman

Live demo
Source code
web vmstat

Live demo camera page
Live demo receive page
Source code
live-ascii-camera

Live demo camera page
Live demo receive page
Source code
live-camera

Live demo
Source code
workerman-chat

Live demo
Source code
workerman-statistics

Live demo
Source code
workerman-statistics

Source code
workerman-jsonRpc

Source code
workerman-thriftRpc

Live demo send page
Live demo receive page
Source code
web-msg-sender

Source code

LICENSE

Workerman is released under the MIT license.

About

一个高性能多进程 PHP socket 服务器框架,支持libevent,支持websocket、http等诸多协议。 High performance Socket server framework for network applications implemented in PHP using libevent

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • PHP 85.2%
  • JavaScript 13.0%
  • CSS 1.6%
  • HTML 0.2%