Không có mô tả

walkor d470cc0614 Update README.md 10 năm trước cách đây
Applications 05eddcf092 static parseHttpHeader 10 năm trước cách đây
GatewayWorker 0aecdaf02c fix close 10 năm trước cách đây
Workerman 1677727d2c fix websocket sec_websocket_key check 10 năm trước cách đây
.gitignore 5e00c897de ignore 12 năm trước cách đây
README.md d470cc0614 Update README.md 10 năm trước cách đây
start.php b7b2620337 v3.0.8 App\*\start fix Select Timer args 10 năm trước cách đây

README.md

Workerman 3.0

homepage:http://www.workerman.net

manual: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


## Available commands

php test.php start ```

![workerman start](http://www.workerman.net/img/workerman-start.png)  

php test.php status ```
workerman satus

php test.php restart php test.php reload ```

Demos

tadpole
workerman todpole BrowserQuest
BrowserQuest width workerman
chat room
workerman-chat
statistics
workerman-statistics
flappybird
workerman-statistics
jsonRpc
workerman-jsonRpc
thriftRpc
workerman-thriftRpc
web-msg-sender
web-msg-sender
queue