• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

workerman: workerman是一款开源高性能PHP应用容器,它大大突破了传统PHP应用范围,被 ...

原作者: [db:作者] 来自: 网络 收藏 邀请

开源软件名称:

workerman

开源软件地址:

https://gitee.com/walkor/workerman

开源软件介绍:

Workerman

GitterLatest Stable VersionTotal DownloadsMonthly DownloadsDaily DownloadsLicense

What is it

Workerman is an asynchronous event-driven PHP framework with high performance to build fast and scalable network applications.Workerman supports HTTP, Websocket, SSL and other custom protocols.Workerman supports event extension.

Requires

PHP 5.3 or Higher
A POSIX compatible operating system (Linux, OSX, BSD)
POSIX and PCNTL extensions required
Event extension recommended for better performance

Installation

composer require workerman/workerman

Basic Usage

A websocket server

<?phpuse Workerman\Worker;require_once __DIR__ . '/vendor/autoload.php';// Create a Websocket server$ws_worker = new Worker('websocket://0.0.0.0:2346');// 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

use Workerman\Worker;require_once __DIR__ . '/vendor/autoload.php';// #### 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, $request) {    //$request->get();    //$request->post();    //$request->header();    //$request->cookie();    //$request->session();    //$request->uri();    //$request->path();    //$request->method();    // Send data to client    $connection->send("Hello World");};// Run all workersWorker::runAll();

A tcp server

use Workerman\Worker;require_once __DIR__ . '/vendor/autoload.php';// #### 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 connection is closed$tcp_worker->onClose = function ($connection) {    echo "Connection closed\n";};Worker::runAll();

Enable SSL

<?phpuse Workerman\Worker;require_once __DIR__ . '/vendor/autoload.php';// SSL context.$context = array(    'ssl' => array(        'local_cert'  => '/your/path/of/server.pem',        'local_pk'    => '/your/path/of/server.key',        'verify_peer' => false,    ));// Create a Websocket server with ssl context.$ws_worker = new Worker('websocket://0.0.0.0:2346', $context);// Enable SSL. WebSocket+SSL means that Secure WebSocket (wss://). // The similar approaches for Https etc.$ws_worker->transport = 'ssl';$ws_worker->onMessage = function ($connection, $data) {    // Send hello $data    $connection->send('Hello ' . $data);};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";    }}
use Workerman\Worker;require_once __DIR__ . '/vendor/autoload.php';// #### 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

use Workerman\Worker;use Workerman\Timer;require_once __DIR__ . '/vendor/autoload.php';$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();

AsyncTcpConnection (tcp/ws/text/frame etc...)

use Workerman\Worker;use Workerman\Connection\AsyncTcpConnection;require_once __DIR__ . '/vendor/autoload.php';$worker = new Worker();$worker->onWorkerStart = function () {    // Websocket protocol for client.    $ws_connection = new AsyncTcpConnection('ws://echo.websocket.org:80');    $ws_connection->onConnect = function ($connection) {        $connection->send('Hello');    };    $ws_connection->onMessage = function ($connection, $data) {        echo "Recv: $data\n";    };    $ws_connection->onError = function ($connection, $code, $msg) {        echo "Error: $msg\n";    };    $ws_connection->onClose = function ($connection) {        echo "Connection closed\n";    };    $ws_connection->connect();};Worker::runAll();

Available commands

php start.php start
php start.php start -d
workerman start
php start.php status
workerman satus
php start.php connections
php start.php stop
php start.php restart
php start.php reload

Documentation

中文主页:http://www.workerman.net

中文文档: https://www.workerman.net/doc/workerman

Documentation:https://github.com/walkor/workerman-manual

Benchmarks

https://www.techempower.com/benchmarks/#section=data-r20&hw=ph&test=db&l=yyku7z-e7&a=2image

Sponsors

opencollective.com/walkor

patreon.com/walkor

Donate

Other links with workerman

webman
PHPSocket.IO
php-socks5
php-http-proxy

LICENSE

Workerman is released under the MIT license.


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap