zoukankan      html  css  js  c++  java
  • Workerman

    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

    <?php
    use WorkermanWorker;
    require_once './Workerman/Autoloader.php';
    
    // Create a Websocket server
    $ws_worker = new Worker("websocket://0.0.0.0:2346");
    
    // 4 processes
    $ws_worker->count = 4;
    
    // Emitted when new connection come
    $ws_worker->onConnect = function($connection)
    {
        echo "New connection
    ";
     };
    
    // 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
    ";
    };
    
    // Run worker
    Worker::runAll();

    An http server

    test.php

    require_once './Workerman/Autoloader.php';
    use WorkermanWorker;
    
    // #### 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 
    ");
    };
    
    // run all workers
    Worker::runAll();

    A WebServer

    test.php

    require_once './Workerman/Autoloader.php';
    use WorkermanWebServer;
    
    // 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 workers
    Worker::runAll();

    A tcp server

    test.php

    require_once './Workerman/Autoloader.php';
    use WorkermanWorker;
    
    // #### 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
    ";
    };
    
    // Emitted when data received
    $tcp_worker->onMessage = function($connection, $data)
    {
        // send data to client
        $connection->send("hello $data 
    ");
    };
    
    // Emitted when new connection come
    $tcp_worker->onClose = function($connection)
    {
        echo "Connection closed
    ";
    };
    
    Worker::runAll();

    Custom protocol

    Protocols/MyTextProtocol.php

    namespace Protocols;
    /**
     * User defined protocol
     * Format Text+"
    "
     */
    class MyTextProtocol
    {
        public static function input($recv_buffer)
        {
            // Find the position of the first occurrence of "
    "
            $pos = strpos($recv_buffer, "
    ");
            // 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."
    ";
        }
    }

    test.php

    require_once './Workerman/Autoloader.php';
    use WorkermanWorker;
    
    // #### MyTextProtocol worker ####
    $text_worker = new Worker("MyTextProtocol://0.0.0.0:5678");
    
    $text_worker->onConnect = function($connection)
    {
        echo "New connection
    ";
    };
    
    $text_worker->onMessage =  function($connection, $data)
    {
        // send data to client
        $connection->send("hello world 
    ");
    };
    
    $text_worker->onClose = function($connection)
    {
        echo "Connection closed
    ";
    };
    
    // run all workers
    Worker::runAll();

    Timer

    test.php

    require_once './Workerman/Autoloader.php';
    use WorkermanWorker;
    use WorkermanLibTimer;
    
    $task = new Worker();
    $task->onWorkerStart = function($task)
    {
        // 2.5 seconds
        $time_interval = 2.5; 
        $timer_id = Timer::add($time_interval, 
            function()
            {
                echo "Timer run
    ";
            }
        );
    };
    
    // run all workers
    Worker::runAll();

    run with:

    php test.php start

    Available commands

    php test.php start
    php test.php start -d
    workerman start
    php test.php status
    workerman satusphp test.php stop
    php test.php restart
    php test.php reload

    Documentation

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

    中文文档: http://doc3.workerman.net

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

  • 相关阅读:
    mysql合并数据
    java协变类型返回
    OSI网络七层模型理解
    mysql性能优化学习
    redis lock 和 tryLock 实际使用区别
    多字段关联同一张表
    第一个Mabits程序
    Mybatis使用Map来实现传递多个参数及Mybati实现模糊查询
    使用Mybatis框架的步骤
    sql小技巧
  • 原文地址:https://www.cnblogs.com/chunguang/p/5715533.html
Copyright © 2011-2022 走看看