博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Workerman
阅读量:6827 次
发布时间:2019-06-26

本文共 4003 字,大约阅读时间需要 13 分钟。

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 PHP

Installation

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:

转载地址:http://ffykl.baihongyu.com/

你可能感兴趣的文章
Centos防火墙设置与端口开放的方法
查看>>
工作总结 razor 接收datatable
查看>>
[leetcode]Unique Paths II
查看>>
C#调用dll时的类型转换总结
查看>>
在线预览Word,Excel
查看>>
Exception loading sessions from persistent storage 这个问题的解决
查看>>
python dns server开源列表 TODO
查看>>
Go中的make和new的区别
查看>>
javascript 面向对象编程(工厂模式、构造函数模式、原型模式)
查看>>
最小二乘法多项式拟合的Java实现
查看>>
ubuntu下安装tomcat
查看>>
Excel两列查找重复值
查看>>
纯CSS实现Div高度根据自适应宽度(百分百调整)
查看>>
Azkaban学习之路 (一)Azkaban的基础介绍
查看>>
域名绑定云主机
查看>>
Linux: grep多个关键字“与”和“或”
查看>>
CAS5.2x单点登录(二)cas服务器连接数据库
查看>>
Android tess_two Android图片文字识别
查看>>
高负载微服务系统的诞生过程
查看>>
maven生命周期理解
查看>>