客戶端訂閱了大量用戶一對一、一對多的channel,現(xiàn)想客戶端A能取消客戶端B的訂閱,比如老師端把學(xué)生端的某個channel退訂,除了發(fā)送“chient-”,能否直接通過服務(wù)端接口退訂學(xué)生端的某個channel?...
建議ThinkOrm.php中的定時器,增加對配置項“default”限制。 否則,如果設(shè)置'default' => 'mongo',只能注釋掉mysql配置項,不然會報錯。 ======================= 問題更新 ========================== think-orm的配置文件如下(代碼二)所示,數(shù)據(jù)庫默認(rèn)采用mongo,此時,并未使用到mysql,所以mysql的配置項不...
1、添加能查詢匹配所有channel,場景適用于群發(fā),如訂閱了private-group-uid,可通過查詢group,匹配到所有訂閱者。即:$push->getChannelInfo('-group-', ['info' => 'channels']) 參考代碼添加到711行: case 'channels': //獲取所有匹配包含的渠道號 $channels = isset($this->_g...
server.php中多處JSON_UNESCAPED_UNICODE寫在json_encode括號外,希望修復(fù)下 例如: $connection->send(json_encode($user_id_array), JSON_UNESCAPED_UNICODE);...
自從學(xué)了workerman,才知道多進(jìn)程這么麻煩。 真實佩服會玩線程纖程的人。 用了多線程,以為同一個進(jìn)程里代碼隨便寫,結(jié)果多個進(jìn)程搶一個redis,數(shù)據(jù)還沒修改呢就被其他進(jìn)程讀取了。 好吧,百度一把,加鎖,然后各種加鎖,無效。。。然后各種測試,發(fā)現(xiàn)只開一個進(jìn)程沒問題,然后知道了redis原子性的概念。 哎,不先解決redis原子性,加一萬把鎖都沒用,真是頭發(fā)掉了無數(shù)根。 最后放一個鏈接,希望能幫到跟我一樣為多線程爭...
圖1:A進(jìn)程count=5,循環(huán)7次AsyncTcpConnection執(zhí)行B進(jìn)程,在第6次的時候,redis報錯,提示redis連接失敗。 圖2:另外,在循環(huán)7次過程中,通過use()傳遞給$connection->onMessage()的變量$key,會因為多進(jìn)程的原因,導(dǎo)致不是foreach按順序循環(huán)的傳遞的$key值嗎? ...
進(jìn)程A和B都設(shè)置了5個子進(jìn)程,進(jìn)程A里放了一個定時器,同一時間去redis中查詢5條數(shù)據(jù)并立刻批量刪除,然后調(diào)用AsyncTcpConnection執(zhí)行進(jìn)程B,redis是用的zset類型。 問題: 1、redis雖然是單進(jìn)程,但是因為5個定時器同時執(zhí)行了進(jìn)程A,導(dǎo)致redis還沒刪除之前,就被其他子進(jìn)程也查詢到了值,導(dǎo)致進(jìn)程A有幾率會執(zhí)行2~3次,但我只想讓進(jìn)程A執(zhí)行一次。我知道可以設(shè)置$worker->id...
答:AsyncTcpConnection可以嵌套,只是因為AsyncTcpConnection是異步的,我在繁忙任務(wù)沒執(zhí)行完畢之前就把AsyncTcpConnection斷開了,所以收不到回調(diào)。解決辦法是,讓進(jìn)程B決定什么時候斷開AsyncTcpConnection。 通過websocket進(jìn)程A,調(diào)用AsyncTcpConnection執(zhí)行繁忙任務(wù)進(jìn)程B,再在進(jìn)程B中通過AsyncTcpConnection連接sm...