項目使用GatewayWorker,碰到兩個小問題求教
1.在Events中onMessage中,假設有3000個設備發(fā)消息過來,我把每個設備的id都存入到$_SESSION中,這里大量操作$_SESSION會不會造成業(yè)務堵塞?
因為每天設備上發(fā)數(shù)據(jù)量比較大,都先寫入REDIS,現(xiàn)在想用異步任務去讀取redis隊列中的數(shù)據(jù)然后寫入MYSQL,如果開了多個進程去取數(shù)據(jù),會不會造成重復寫入
另外問個項目實現(xiàn)思路的問題:
現(xiàn)在服務器A上單獨跑了GW來處理硬件上報數(shù)據(jù),然后另外服務器B上WEB后臺需要獲取硬件的在線狀態(tài)
我現(xiàn)在的做法是單獨開了websocket協(xié)議的gateway,然后WEB后臺連上來,服務器A中GW接收數(shù)據(jù),
大概代碼是這樣
if (!isset($_SESSION)) {
// 需要從message中取出設備的ID
$arr = explode('\n', $message);
foreach ($arr as $str) {
$uid = xxxxx;
}
$_SESSION = $uid;
Gateway::bindUid($client_id, $uid);
}
然后,在onClose方法中用
Gateway::sendToUid('WEB后臺uid', $deviceId);
推送數(shù)據(jù)來完成通知某個設備下線了
請問這樣處理是否合理或者還有其他更簡便的方法來實現(xiàn)
萬分感謝!!!