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

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

Nucreon

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

問(wèn)題 01 ? count 進(jìn)程數(shù)為10的跟1的比起來(lái)更快?

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

workerA 為 count = 10
workerB 為 count = 1

從某個(gè)地方同時(shí)請(qǐng)求 10個(gè)的話(huà)

worker A 因?yàn)槭?10個(gè) 所以 把十個(gè)分配到每個(gè)進(jìn)程
那么所花的總時(shí)間是 處理10個(gè)當(dāng)中最長(zhǎng)的

worker B 因?yàn)槭?1個(gè) 所以 把十個(gè)一個(gè)一個(gè)接收并更新
所以花的總時(shí)間為 全部處理完后的時(shí)間?

問(wèn)題 02 ? Channel 雖然底層是 workerman 但是不是有很大差別?

因?yàn)槲抑芭艿某绦虍?dāng)中是 ServerA 監(jiān)聽(tīng) websocket 數(shù)據(jù)并發(fā)送到 ServerB 的場(chǎng)景


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

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


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


  • ServerA 發(fā)送時(shí),會(huì) AsyncTcpConnection 來(lái)連接 ServerB

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

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


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


  • ServerA 發(fā)送時(shí),會(huì) Channel Publish 來(lái)發(fā)送數(shù)據(jù)

  • ServerB 監(jiān)聽(tīng) Channel ,接收請(qǐng)求就會(huì) 插入或更新數(shù)據(jù)庫(kù)


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


?? 原先拋出異常的代碼

$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ù)庫(kù)
    $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ù)庫(kù)
    });
};
865 1 0
1個(gè)回答

walkor 打賞

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

Mongodb 插入或更新異常可能是Mongodb 初始化的時(shí)機(jī)錯(cuò)誤,不要提前初始化,可以在onWorkerStart里初始化。
這部分參考文檔 http://m.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 初始化的
    還是我這邊的問(wèn)題,我得多嘗試幾下看看是什么原因
    實(shí)力不行用苦力來(lái)湊合 ??

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