宅男在线永久免费观看网直播,亚洲欧洲日产国码无码久久99,野花社区在线观看视频,亚洲人交乣女bbw,一本一本久久a久久精品综合不卡

全部
常見(jiàn)問(wèn)題
產(chǎn)品動(dòng)態(tài)
精選推薦

workerman的基本用法(示例詳解)

管理 管理 編輯 刪除

workerman是什么?

Workerman是一個(gè)異步事件驅(qū)動(dòng)的PHP框架,具有高性能,可輕松構(gòu)建快速,可擴(kuò)展的網(wǎng)絡(luò)應(yīng)用程序。支持HTTP,Websocket,SSL和其他自定義協(xié)議。支持libevent,HHVM,ReactPHP。

要求

  • PHP 5.3或更高版本
  • 兼容POSIX的操作系統(tǒng)(Linux,OSX,BSD)
  • 用于PHP的POSIX和PCNTL擴(kuò)展

安裝

composer require workerman/workerman

基本用法

websocket服務(wù)器


require_once __DIR__ . '/vendor/autoload.php';

use Workerman\Worker;

 

// 創(chuàng)建一個(gè)Websocket服務(wù)器

$ws_worker = new Worker("websocket://0.0.0.0:2346");

 

$ws_worker->count = 4;

 

// 在新連接到來(lái)時(shí)發(fā)出

$ws_worker->onConnect = function($connection)

{

    echo "New connection\n";

 };

 

// 接收數(shù)據(jù)時(shí)發(fā)出

$ws_worker->onMessage = function($connection, $data)

{

    // Send hello $data

    $connection->send('hello ' . $data);

};

 

// 連接關(guān)閉時(shí)發(fā)出

$ws_worker->onClose = function($connection)

{

    echo "Connection closed\n";

};

 

// 運(yùn)行worker

Worker::runAll();

http服務(wù)器

require_once __DIR__ . '/vendor/autoload.php';

use Workerman\Worker;

 

// #### http worker ####

$http_worker = new Worker("http://0.0.0.0:2345");

 

$http_worker->count = 4;

 

// 接收數(shù)據(jù)時(shí)發(fā)出

$http_worker->onMessage = function($connection, $data)

{

    //$_GET、$_POST、$_COOKIE、$_SESSION、$_SERVER、$_FILES都是可用的

    var_dump($_GET, $_POST, $_COOKIE, $_SESSION, $_SERVER, $_FILES);

    // 發(fā)送數(shù)據(jù)給客戶(hù)端

    $connection->send("hello world \n");

};

 

// 運(yùn)行所有workers

Worker::runAll();

WebServer

require_once __DIR__ . '/vendor/autoload.php';

use Workerman\WebServer;

use Workerman\Worker;

 

// WebServer

$web = new WebServer("http://0.0.0.0:80");

 

$web->count = 4;

 

$web->addRoot('www.your_domain.com', '/your/path/Web');

$web->addRoot('www.another_domain.com', '/another/path/Web');

 

Worker::runAll();

TCP服務(wù)器

require_once __DIR__ . '/vendor/autoload.php';

use Workerman\Worker;

 

// #### 創(chuàng)建socket并監(jiān)聽(tīng)1234端口 ####

$tcp_worker = new Worker("tcp://0.0.0.0:1234");

 

$tcp_worker->count = 4;

 

//在新連接到來(lái)時(shí)發(fā)出

$tcp_worker->onConnect = function($connection)

{

    echo "New Connection\n";

};

 

// 接收數(shù)據(jù)時(shí)發(fā)出

$tcp_worker->onMessage = function($connection, $data)

{

    // 發(fā)送數(shù)據(jù)給客戶(hù)端

    $connection->send("hello $data \n");

};

 

// 在新連接到來(lái)時(shí)發(fā)出

$tcp_worker->onClose = function($connection)

{

    echo "Connection closed\n";

};

 

Worker::runAll();

啟用SSL

require_once __DIR__ . '/vendor/autoload.php';

use Workerman\Worker;

 

// SSL環(huán)境

$context = array(

    'ssl' => array(

        'local_cert'  => '/your/path/of/server.pem',

        'local_pk'    => '/your/path/of/server.key',

        'verify_peer' => false,

    )

);

 

// 創(chuàng)建一個(gè)帶有ssl的Websocket服務(wù)器。

$ws_worker = new Worker("websocket://0.0.0.0:2346", $context);

 

// 啟用SSL。WebSocket+SSL意味著安全的WebSocket (wss://)。

//類(lèi)似的Https方法等等。

$ws_worker->transport = 'ssl';

 

$ws_worker->onMessage = function($connection, $data)

{

    // 發(fā)送hello $data

    $connection->send('hello ' . $data);

};

 

Worker::runAll();

自定義協(xié)議

Protocols/MyTextProtocol.php

namespace Protocols;

/**

 * 用戶(hù)定義的協(xié)議

*格式文本+“\ n”

 */

class MyTextProtocol

{

    public static function input($recv_buffer)

    {

        // 找到“\n”第一個(gè)出現(xiàn)的位置

        $pos = strpos($recv_buffer, "\n");

        // 不是一個(gè)完整的package。返回0,因?yàn)閜ackage的長(zhǎng)度無(wú)法計(jì)算

        if($pos === false)

        {

            return 0;

        }

        // 返回package的長(zhǎng)度

        return $pos+1;

    }

 

    public static function decode($recv_buffer)

    {

        return trim($recv_buffer);

    }

 

    public static function encode($data)

    {

        return $data."\n";

    }

}
require_once __DIR__ . '/vendor/autoload.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)

{

    // 發(fā)送數(shù)據(jù)給客戶(hù)端

    $connection->send("hello world \n");

};

 

$text_worker->onClose = function($connection)

{

    echo "Connection closed\n";

};

 

// 運(yùn)行所有workers

Worker::runAll();

計(jì)時(shí)器

require_once __DIR__ . '/vendor/autoload.php';

use Workerman\Worker;

use Workerman\Lib\Timer;

 

$task = new Worker();

$task->onWorkerStart = function($task)

{

    // 2.5秒

    $time_interval = 2.5; 

    $timer_id = Timer::add($time_interval, 

        function()

        {

            echo "Timer run\n";

        }

    );

};

 

//運(yùn)行

Worker::runAll();

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

require_once __DIR__ . '/vendor/autoload.php';

use Workerman\Worker;

use Workerman\Connection\AsyncTcpConnection;

 

$worker = new Worker();

$worker->onWorkerStart = function()

{

    //客戶(hù)端Websocket協(xié)議。

    $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();

ReactPHP的異步Mysql

composer require react/mysql
require_once __DIR__ . '/vendor/autoload.php';

use Workerman\Worker;

 

$worker = new Worker('tcp://0.0.0.0:6161');

$worker->onWorkerStart = function() {

    global $mysql;

    $loop  = Worker::getEventLoop();

    $mysql = new React\MySQL\Connection($loop, array(

        'host'   => '127.0.0.1',

        'dbname' => 'dbname',

        'user'   => 'user',

        'passwd' => 'passwd',

    ));

    $mysql->on('error', function($e){

        echo $e;

    });

    $mysql->connect(function ($e) {

        if($e) {

            echo $e;

        } else {

            echo "connect success\n";

        }

    });

};

$worker->onMessage = function($connection, $data) {

    global $mysql;

    $mysql->query('show databases' /*trim($data)*/, function ($command, $mysql) use ($connection) {

        if ($command->hasError()) {

            $error = $command->getError();

        } else {

            $results = $command->resultRows;

            $fields  = $command->resultFields;

            $connection->send(json_encode($results));

        }

    });

};

Worker::runAll();

ReactPHP的Async Redis

composer require clue/redis-react
require_once __DIR__ . '/vendor/autoload.php';

use Clue\React\Redis\Factory;

use Clue\React\Redis\Client;

use Workerman\Worker;

 

$worker = new Worker('tcp://0.0.0.0:6161');

 

$worker->onWorkerStart = function() {

    global $factory;

    $loop    = Worker::getEventLoop();

    $factory = new Factory($loop);

};

 

$worker->onMessage = function($connection, $data) {

    global $factory;

    $factory->createClient('localhost:6379')->then(function (Client $client) use ($connection) {

        $client->set('greeting', 'Hello world');

        $client->append('greeting', '!');

 

        $client->get('greeting')->then(function ($greeting) use ($connection){

            // Hello world!

            echo $greeting . PHP_EOL;

            $connection->send($greeting);

        });

 

        $client->incr('invocation')->then(function ($n) use ($connection){

            echo 'This is invocation #' . $n . PHP_EOL;

            $connection->send($n);

        });

    });

};

 

Worker::runAll();

Aysnc dns的ReactPHP

composer require react/dns
require_once __DIR__ . '/vendor/autoload.php';

use Workerman\Worker;

$worker = new Worker('tcp://0.0.0.0:6161');

$worker->onWorkerStart = function() {

    global   $dns;

    // Get event-loop.

    $loop    = Worker::getEventLoop();

    $factory = new React\Dns\Resolver\Factory();

    $dns     = $factory->create('8.8.8.8', $loop);

};

$worker->onMessage = function($connection, $host) {

    global $dns;

    $host = trim($host);

    $dns->resolve($host)->then(function($ip) use($host, $connection) {

        $connection->send("$host: $ip");

    },function($e) use($host, $connection){

        $connection->send("$host: {$e->getMessage()}");

    });

};

 

Worker::runAll();

ReactPHP的Http客戶(hù)端

composer require react/http-client
require_once __DIR__ . '/vendor/autoload.php';

use Workerman\Worker;

 

$worker = new Worker('tcp://0.0.0.0:6161');

 

$worker->onMessage = function($connection, $host) {

    $loop    = Worker::getEventLoop();

    $client  = new \React\HttpClient\Client($loop);

    $request = $client->request('GET', trim($host));

    $request->on('error', function(Exception $e) use ($connection) {

        $connection->send($e);

    });

    $request->on('response', function ($response) use ($connection) {

        $response->on('data', function ($data) use ($connection) {

            $connection->send($data);

        });

    });

    $request->end();

};

 

Worker::runAll();

ReactPHP的ZMQ

composer require react/zmq
require_once __DIR__ . '/vendor/autoload.php';

use Workerman\Worker;

$worker = new Worker('text://0.0.0.0:6161');

$worker->onWorkerStart = function() {

    global   $pull;

    $loop    = Worker::getEventLoop();

    $context = new React\ZMQ\Context($loop);

    $pull    = $context->getSocket(ZMQ::SOCKET_PULL);

    $pull->bind('tcp://127.0.0.1:5555');

    $pull->on('error', function ($e) {

        var_dump($e->getMessage());

    });

    $pull->on('message', function ($msg) {

        echo "Received: $msg\n";

    });

};

Worker::runAll();

react的STOMP

composer requirereact/stomp

require_once __DIR__ . '/vendor/autoload.php';

use Workerman\Worker;

 

$worker = new Worker('text://0.0.0.0:6161');

 

$worker->onWorkerStart = function() {

    global   $client;

    $loop    = Worker::getEventLoop();

    $factory = new React\Stomp\Factory($loop);

    $client  = $factory->createClient(array('vhost' => '/', 'login' => 'guest', 'passcode' => 'guest'));

 

    $client

        ->connect()

        ->then(function ($client) use ($loop) {

            $client->subscribe('/topic/foo', function ($frame) {

                echo "Message received: {$frame->body}\n";

            });

        });

};

 

Worker::runAll(); 

可用命令

php start.php start
php start.php start -d

2f960202310071039557166.png

php start.php status [object Object]

php start.php connections

php start.php stop 

php start.php restart 

php start.php reload 

基準(zhǔn)

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

代碼


use Workerman\Worker;

$worker = new Worker('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\r\nContent-Length: 5\r\n\r\nhello");

};

Worker::runAll();

結(jié)果

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)

以上就是workerman的基本用法(示例詳解)的詳細(xì)內(nèi)容


請(qǐng)登錄后查看

CRMEB-慕白寒窗雪 最后編輯于2023-10-07 10:40:43

快捷回復(fù)
回復(fù)
回復(fù)
回復(fù)({{post_count}}) {{!is_user ? '我的回復(fù)' :'全部回復(fù)'}}
排序 默認(rèn)正序 回復(fù)倒序 點(diǎn)贊倒序

{{item.user_info.nickname ? item.user_info.nickname : item.user_name}} LV.{{ item.user_info.bbs_level || item.bbs_level }}

作者 管理員 企業(yè)

{{item.floor}}# 同步到gitee 已同步到gitee {{item.is_suggest == 1? '取消推薦': '推薦'}}
{{item.is_suggest == 1? '取消推薦': '推薦'}}
沙發(fā) 板凳 地板 {{item.floor}}#
{{item.user_info.title || '暫無(wú)簡(jiǎn)介'}}
附件

{{itemf.name}}

{{item.created_at}}  {{item.ip_address}}
打賞
已打賞¥{{item.reward_price}}
{{item.like_count}}
{{item.showReply ? '取消回復(fù)' : '回復(fù)'}}
刪除
回復(fù)
回復(fù)

{{itemc.user_info.nickname}}

{{itemc.user_name}}

回復(fù) {{itemc.comment_user_info.nickname}}

附件

{{itemf.name}}

{{itemc.created_at}}
打賞
已打賞¥{{itemc.reward_price}}
{{itemc.like_count}}
{{itemc.showReply ? '取消回復(fù)' : '回復(fù)'}}
刪除
回復(fù)
回復(fù)
查看更多
打賞
已打賞¥{{reward_price}}
1829
{{like_count}}
{{collect_count}}
添加回復(fù) ({{post_count}})

相關(guān)推薦

快速安全登錄

使用微信掃碼登錄
{{item.label}} 加精
{{item.label}} {{item.label}} 板塊推薦 常見(jiàn)問(wèn)題 產(chǎn)品動(dòng)態(tài) 精選推薦 首頁(yè)頭條 首頁(yè)動(dòng)態(tài) 首頁(yè)推薦
取 消 確 定
回復(fù)
回復(fù)
問(wèn)題:
問(wèn)題自動(dòng)獲取的帖子內(nèi)容,不準(zhǔn)確時(shí)需要手動(dòng)修改. [獲取答案]
答案:
提交
bug 需求 取 消 確 定
打賞金額
當(dāng)前余額:¥{{rewardUserInfo.reward_price}}
{{item.price}}元
請(qǐng)輸入 0.1-{{reward_max_price}} 范圍內(nèi)的數(shù)值
打賞成功
¥{{price}}
完成 確認(rèn)打賞

微信登錄/注冊(cè)

切換手機(jī)號(hào)登錄

{{ bind_phone ? '綁定手機(jī)' : '手機(jī)登錄'}}

{{codeText}}
切換微信登錄/注冊(cè)
暫不綁定
CRMEB客服

CRMEB咨詢(xún)熱線(xiàn) 咨詢(xún)熱線(xiàn)

400-8888-794

微信掃碼咨詢(xún)

CRMEB開(kāi)源商城下載 源碼下載 CRMEB幫助文檔 幫助文檔
返回頂部 返回頂部
CRMEB客服