Không có mô tả

walkor 967872a7bd checkErrors 10 năm trước cách đây
Applications 05eddcf092 static parseHttpHeader 10 năm trước cách đây
GatewayWorker ddd527ee3d checkErrors when process exit 10 năm trước cách đây
Workerman 967872a7bd checkErrors 10 năm trước cách đây
.gitignore 5e00c897de ignore 12 năm trước cách đây
README.md 08b3bd3763 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

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


## 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