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

關(guān)于 Channel Workerman 的 count 問題

Nucreon

Workerman 我到現(xiàn)在已經(jīng)使用??? (學(xué)習(xí))了一年多左右,
但是到現(xiàn)在還困惑在這些通信機制和進程(因為長時間泡在 PHP-FPM+NGINX里不太懂其他)

問題 01 ? count 進程數(shù)為10的跟1的比起來更快?

按我理解的方式來說明的話
假設(shè)我們有兩個服務(wù),業(yè)務(wù)都是更新數(shù)據(jù)庫

workerA 為 count = 10
workerB 為 count = 1

從某個地方同時請求 10個的話

worker A 因為是 10個 所以 把十個分配到每個進程
那么所花的總時間是 處理10個當(dāng)中最長的

worker B 因為是 1個 所以 把十個一個一個接收并更新
所以花的總時間為 全部處理完后的時間?

問題 02 ? Channel 雖然底層是 workerman 但是不是有很大差別?

因為我之前跑的程序當(dāng)中是 ServerA 監(jiān)聽 websocket 數(shù)據(jù)并發(fā)送到 ServerB 的場景


ServerA 只是 默認(rèn)的worker ,沒有配置端口(count 為 1)

ServerB 配置了端口和 http協(xié)議 并設(shè)置 count 為 10


爬蟲業(yè)務(wù)部分是:如果 在監(jiān)聽中 type 為指定的 value 的話
ServerA 把數(shù)據(jù)發(fā)送給 ServerB,ServerB接收后會插入或更新數(shù)據(jù)庫


  • ServerA 發(fā)送時,會 AsyncTcpConnection 來連接 ServerB

  • 發(fā)送數(shù)據(jù) $conn->send($data)

  • ServerB 接收請求就會 插入或更新數(shù)據(jù)庫 從 ServerB 執(zhí)行 $conn->close()


但是不知道為什么 Mongodb 插入或更新的時候拋出異常
拋出的異常 Google了也找不到問題所在(顯示該 database 不能 insert 的異常)
我以為是數(shù)據(jù)請求數(shù)大的問題
摸不著頭腦就嘗試 ServerAServerB 之間用 Channel 通信


  • ServerA 發(fā)送時,會 Channel Publish 來發(fā)送數(shù)據(jù)

  • ServerB 監(jiān)聽 Channel ,接收請求就會 插入或更新數(shù)據(jù)庫


一樣的業(yè)務(wù)我就把通信的更換而已就不拋出異常了 ???
雖然問題是解決了,但困擾我的就在這個 Channel 服務(wù)上
因為跟 問題01 一樣 進程是 1,如果信息量大的話會不會阻塞?
還是我根本上理解錯了概念了嗎?以下是我的代碼


?? 原先拋出異常的代碼

$serverA = new Workerman\Worker();
$serverA->onWorkerStart = function(){
    $remote = new AsyncTcpConnection($remote_websocket);
    $remote->onMessage = function($data){
        // 一些業(yè)務(wù)...
        $serverB = AsyncTcpConnection('tcp://127.0.0.1:1111');
        $serverB->send($some_data);
        $serverB->connect();
    };
    $remote->connect();
};
$serverB = new Workerman\Worker('tcp://127.0.0.1:1111');
$serverB->count = 10;
$serverB->onWorkerStart = function(){};
$serverB->onMessage = function($conn,$data){
    // 一些業(yè)務(wù)...
    // 插入或更新數(shù)據(jù)庫
    $conn->close();
};

?? 現(xiàn)在正常跑通的代碼

$serverA = new Workerman\Worker();
$serverA->onWorkerStart = function(){
    Channel\Client::connect('127.0.0.1',1111);
    $remote = new AsyncTcpConnection($remote_websocket);
    $remote->onMessage = function($data){
        // 一些業(yè)務(wù)...
        \Channel\Client::publish('execute',$some_data);
    };
    $remote->connect();
};
$serverB = new Workerman\Worker();
$serverB->onWorkerStart = function(){
    Channel\Client::connect('127.0.0.1',1111);
    Channel\Client::on('execute',function($data){
        // 一些業(yè)務(wù)...
        // 插入或更新數(shù)據(jù)庫
    });
};
842 1 0
1個回答

walkor 打賞

進程數(shù)設(shè)置參考文檔 http://www.wtbis.cn/doc/workerman/faq/processes-count.html
總的來說有數(shù)據(jù)庫、redis、curl等阻塞io操作的進程數(shù)多開一些,比如cpu的3-8倍。
如果業(yè)務(wù)沒有io操作進程數(shù)開成和cpu核數(shù)一樣即可。

Mongodb 插入或更新異??赡苁荕ongodb 初始化的時機錯誤,不要提前初始化,可以在onWorkerStart里初始化。
這部分參考文檔 http://www.wtbis.cn/doc/workerman/development/before-development.html#%E4%B8%89%E3%80%81%E5%8C%BA%E5%88%86%E4%B8%BB%E8%BF%9B%E7%A8%8B%E5%92%8C%E5%AD%90%E8%BF%9B%E7%A8%8B

  • Nucreon 2023-04-18

    emmmm ??? 我也是在 onWorkerStart 初始化的
    還是我這邊的問題,我得多嘗試幾下看看是什么原因
    實力不行用苦力來湊合 ??

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