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

請(qǐng)教關(guān)于session和異步任務(wù)的兩個(gè)疑問

defeatlr

項(xiàng)目使用GatewayWorker,碰到兩個(gè)小問題求教
1.在Events中onMessage中,假設(shè)有3000個(gè)設(shè)備發(fā)消息過來,我把每個(gè)設(shè)備的id都存入到$_SESSION中,這里大量操作$_SESSION會(huì)不會(huì)造成業(yè)務(wù)堵塞?

因?yàn)槊刻煸O(shè)備上發(fā)數(shù)據(jù)量比較大,都先寫入REDIS,現(xiàn)在想用異步任務(wù)去讀取redis隊(duì)列中的數(shù)據(jù)然后寫入MYSQL,如果開了多個(gè)進(jìn)程去取數(shù)據(jù),會(huì)不會(huì)造成重復(fù)寫入

另外問個(gè)項(xiàng)目實(shí)現(xiàn)思路的問題:
現(xiàn)在服務(wù)器A上單獨(dú)跑了GW來處理硬件上報(bào)數(shù)據(jù),然后另外服務(wù)器B上WEB后臺(tái)需要獲取硬件的在線狀態(tài)

我現(xiàn)在的做法是單獨(dú)開了websocket協(xié)議的gateway,然后WEB后臺(tái)連上來,服務(wù)器A中GW接收數(shù)據(jù),
大概代碼是這樣

if (!isset($_SESSION)) {
    // 需要從message中取出設(shè)備的ID
    $arr = explode('\n', $message);
    foreach ($arr as $str) {
        $uid = xxxxx;
    }
    $_SESSION = $uid;
    Gateway::bindUid($client_id, $uid);
}

然后,在onClose方法中用
Gateway::sendToUid('WEB后臺(tái)uid', $deviceId);
推送數(shù)據(jù)來完成通知某個(gè)設(shè)備下線了
請(qǐng)問這樣處理是否合理或者還有其他更簡便的方法來實(shí)現(xiàn)
萬分感謝!!!

3254 1 0
1個(gè)回答

walkor 打賞

1、gatewayWorker的Session是存儲(chǔ)在內(nèi)存里的,$_SESSION是異步存取的,不會(huì)造成業(yè)務(wù)阻塞。Gateway::getSession/SetSession這些是同步接口,會(huì)造成阻塞,但是也很快

2、理論上會(huì)造成重復(fù)

3、合理,已經(jīng)很便捷

  • defeatlr 2018-01-02

    感謝walkor大神耐心指導(dǎo)!!!

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