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.
Requires
PHP 5.3 or Higher
A POSIX compatible operating system (Linux, OSX, BSD)POSIX and PCNTL extensions for PHPInstallation
composer require workerman/workerman
Basic Usage
A websocket server
test.php
count = 4;// Emitted when new connection come$ws_worker->onConnect = function($connection){ echo "New connection\n"; };// Emitted when data received$ws_worker->onMessage = function($connection, $data){ // Send hello $data $connection->send('hello ' . $data);};// Emitted when connection closed$ws_worker->onClose = function($connection){ echo "Connection closed\n";};// Run workerWorker::runAll();
An http server
test.php
require_once './Workerman/Autoloader.php';use Workerman\Worker;// #### http worker ####$http_worker = new Worker("http://0.0.0.0:2345");// 4 processes$http_worker->count = 4;// Emitted when data received$http_worker->onMessage = function($connection, $data){ // $_GET, $_POST, $_COOKIE, $_SESSION, $_SERVER, $_FILES are available var_dump($_GET, $_POST, $_COOKIE, $_SESSION, $_SERVER, $_FILES); // send data to client $connection->send("hello world \n");};// run all workersWorker::runAll();
A WebServer
test.php
require_once './Workerman/Autoloader.php';use Workerman\WebServer;// WebServer$web = new WebServer("http://0.0.0.0:80");// 4 processes$web->count = 4;// Set the root of domains$web->addRoot('www.your_domain.com', '/your/path/Web');$web->addRoot('www.another_domain.com', '/another/path/Web');// run all workersWorker::runAll();
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");// 4 processes$tcp_worker->count = 4;// Emitted when new connection come$tcp_worker->onConnect = function($connection){ echo "New Connection\n";};// Emitted when data received$tcp_worker->onMessage = function($connection, $data){ // send data to client $connection->send("hello $data \n");};// Emitted when new connection come$tcp_worker->onClose = function($connection){ echo "Connection closed\n";};Worker::runAll();
Custom protocol
Protocols/MyTextProtocol.php
namespace Protocols;/** * 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->onConnect = function($connection){ echo "New connection\n";};$text_worker->onMessage = function($connection, $data){ // send data to client $connection->send("hello world \n");};$text_worker->onClose = function($connection){ echo "Connection closed\n";};// run all workersWorker::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 workersWorker::runAll();
run with:
php test.php start
Available commands
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
Documentation
中文主页:
中文文档:
Documentation: