国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

關(guān)于workerman的工作模式

1024

問題描述

workerman的工作模式不就是swoole的單線程模式(SWOOLE_BASE)嗎?
swoole的文檔中寫道(https://wiki.swoole.com/wiki/page/353.html):
每個(gè)Worker進(jìn)程同時(shí)承擔(dān)了Process模式下Reactor線程和Worker進(jìn)程兩部分職責(zé)
其實(shí)就是reactor模型的單線程模式,對(duì)吧?在reactor模型的單線程模式的某個(gè)線程中,如果回調(diào)函數(shù)或者叫事件處理函數(shù)十分耗時(shí),那么就無法執(zhí)行到epoll_wait,于是無法立即處理后面的事件

情況1:設(shè)置workerman的count=1,對(duì)應(yīng)于一個(gè)reactor單線程模式。那么只有一個(gè)邏輯CPU在處理所有請(qǐng)求,如果一個(gè)請(qǐng)求執(zhí)行耗時(shí)操作中,那么下一個(gè)請(qǐng)求就進(jìn)不來;

情況2:設(shè)置workerman的count=n(>1),對(duì)應(yīng)于多個(gè)reactor單線程模式。假設(shè)某個(gè)worker進(jìn)程(該進(jìn)程是單線程的)的回調(diào)函數(shù)執(zhí)行了耗時(shí)的操作,但是下一個(gè)請(qǐng)求可以負(fù)載均衡分配到其它的worker進(jìn)程(該進(jìn)程是單線程的),還是可以立即響應(yīng)的。我的理解是對(duì)的吧?

代碼

情況1:count=1,回調(diào)函數(shù)handle_message中sleep(100)

<?php
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';

$global_uid = 0;

// 當(dāng)客戶端連上來時(shí)分配uid,并保存連接,并通知所有客戶端
function handle_connection($connection)
{
    global $text_worker, $global_uid;
    // 為這個(gè)連接分配一個(gè)uid
    $connection->uid = ++$global_uid;
    echo "[{$global_uid}]連接成功\n";
}

// 當(dāng)客戶端發(fā)送消息過來時(shí),轉(zhuǎn)發(fā)給所有人
function handle_message(TcpConnection $connection, $data)
{
    ...
    sleep(100);
}

// 當(dāng)客戶端斷開時(shí),廣播給所有客戶端
function handle_close($connection)
{
    ...
}

// 創(chuàng)建一個(gè)文本協(xié)議的Worker監(jiān)聽2347接口
$text_worker = new Worker("text://0.0.0.0:2347");

// 只啟動(dòng)1個(gè)進(jìn)程,這樣方便客戶端之間傳輸數(shù)據(jù)
$text_worker->count = 1;

$text_worker->onConnect = 'handle_connection';
$text_worker->onMessage = 'handle_message';
$text_worker->onClose = 'handle_close';

Worker::runAll();

情況2:count=4,回調(diào)函數(shù)handle_message中sleep(100)

<?php
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';

$global_uid = 0;

// 當(dāng)客戶端連上來時(shí)分配uid,并保存連接,并通知所有客戶端
function handle_connection($connection)
{
    global $text_worker, $global_uid;
    // 為這個(gè)連接分配一個(gè)uid
    $connection->uid = ++$global_uid;
    echo "[{$global_uid}]連接成功\n";
}

// 當(dāng)客戶端發(fā)送消息過來時(shí),轉(zhuǎn)發(fā)給所有人
function handle_message(TcpConnection $connection, $data)
{
    ...
    sleep(100);
}

// 當(dāng)客戶端斷開時(shí),廣播給所有客戶端
function handle_close($connection)
{
    ...
}

// 創(chuàng)建一個(gè)文本協(xié)議的Worker監(jiān)聽2347接口
$text_worker = new Worker("text://0.0.0.0:2347");

// 啟動(dòng)4個(gè)進(jìn)程
$text_worker->count = 4;

$text_worker->onConnect = 'handle_connection';
$text_worker->onMessage = 'handle_message';
$text_worker->onClose = 'handle_close';

Worker::runAll();
1439 1 1
1個(gè)回答

walkor 打賞

對(duì),workerman的工作模式類似swoole的SWOOLE_BASE。
情況1:是的
情況2:看情況,如果是長連接應(yīng)用,假設(shè)客戶端A和客戶端B都連在同一個(gè)進(jìn)程上,當(dāng)進(jìn)程處理客戶端A的的請(qǐng)求時(shí),客戶端B發(fā)的請(qǐng)求仍然會(huì)發(fā)到這個(gè)進(jìn)程上。如果是短連接應(yīng)用,假設(shè)進(jìn)程A在處理客戶端A的請(qǐng)求,這時(shí)客戶端B發(fā)起連接,這時(shí)候客戶端B會(huì)連接到其它空閑的進(jìn)程上,請(qǐng)求也會(huì)發(fā)給空閑的進(jìn)程。

年代過于久遠(yuǎn),無法發(fā)表回答
??