項(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)
萬分感謝!!!