Home page:http://www.workerman.net
Documentation:http://doc3.workerman.net
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.
test.php
require_once'./Workerman/Autoloader.php';
useWorkerman\Worker;
// #### create socket and listen 1234 port ####$tcp_worker = newWorker("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();test.php
require_once'./Workerman/Autoloader.php';
useWorkerman\Worker;
// #### http worker ####$http_worker = newWorker("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();test.php
require_once'./Workerman/Autoloader.php';
useWorkerman\Worker// #### websocket worker ####$ws_worker = newWorker("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();Protocols/MyTextProtocol.php
/** * User defined protocol * Format Text+"\n" */class MyTextProtocol
{
publicstaticfunctioninput($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 calculatedif($pos === false)
{
return0;
}
// Return length of the packagereturn$pos+1;
}
publicstaticfunctiondecode($recv_buffer)
{
returntrim($recv_buffer);
}
publicstaticfunctionencode($data)
{
return$data."\n";
}
}test.php
require_once'./Workerman/Autoloader.php';
useWorkerman\Worker// #### MyTextProtocol worker ####$text_worker = newWorker("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();test.php
require_once'./Workerman/Autoloader.php';
use \Workerman\WebServer;
// WebServer$web = newWebServer("http://0.0.0.0:8686");
$web->count = 2;
$web->addRoot('www.your_domain.com', __DIR__.'/Web');
// run all workers
Worker::runAll();test.php
require_once'./Workerman/Autoloader.php';
useWorkerman\Worker;
useWorkerman\Lib\Timer;
$task = newWorker();
$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
php test.php start php test.php start -d php test.php status php test.php stop php test.php restart php test.php reload
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
<?phpuseWorkerman\Worker;
$worker = newWorker('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
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)
Live demo camera page
Live demo receive page
Source code
Live demo camera page
Live demo receive page
Source code
Live demo send page
Live demo receive page
Source code
Workerman is released under the MIT license.













