我使用的gateway,硬件傳輸數(shù)據(jù)的時(shí)候可以帶上當(dāng)前硬件設(shè)備的pid,然后我用gateway推送給當(dāng)前正在使用這臺硬件設(shè)備的用戶手機(jī)app上。是不是就是要這手機(jī)app連接的時(shí)候也傳過來這臺設(shè)備的pid,然后這兩個(gè)客戶端建立單獨(dú)的連接通訊,那我服務(wù)端要怎么判斷呢?如果硬件用tcp長連接把數(shù)據(jù)存數(shù)據(jù)庫,然后然后app用http輪詢調(diào)用倒是可以實(shí)現(xiàn)。 只是我希望服務(wù)端也能通過和app長連直接推送,這樣應(yīng)該更快一些
1、設(shè)備連接gateway
2、設(shè)備發(fā)送一個(gè)pid登錄請求,gateway中Events::onMessage回調(diào)中收到請求,得到pid進(jìn)行綁定,Gateway::bindUid($client_id, $pid);,同時(shí)設(shè)置$_SESSION=$pid,用來gateway記錄當(dāng)前設(shè)備pid
3、因?yàn)樵O(shè)備綁定了pid,那么gateway服務(wù)端可以通過Gateway::sendToUid($pid, $data);給任意設(shè)備發(fā)送數(shù)據(jù)
4、同樣app鏈接gateway
5、app發(fā)送一個(gè)請求,請求中包含要查看的pid
6、gateway中Events::onMessage回調(diào)中收到app請求,得到要查看的pid,用Gateway::joinGroup($client_id, $pid); 加入分組(或者叫訂閱這個(gè)pid發(fā)來的消息)
7、設(shè)備pid傳輸數(shù)據(jù)到gateway,gateway中Events::onMessage回調(diào)中收到數(shù)據(jù),首先判斷$_SESSION是否存在,存在的話證明這個(gè)設(shè)備驗(yàn)證過pid,并綁定過pid。沒有驗(yàn)證過則進(jìn)入步驟2驗(yàn)證綁定。
如果已經(jīng)驗(yàn)證,則Events::onMessage回調(diào)中調(diào)用Gateway::sendToGroup($_SESSION, $data)給pid分組發(fā)送數(shù)據(jù),那么6步驟中joinGroup過的app將會收到對應(yīng)pid設(shè)備發(fā)來的數(shù)據(jù)
請問如果我想把當(dāng)前連接的硬件設(shè)備,連接的時(shí)候把時(shí)間記錄下來,斷開的時(shí)候再記錄下來寫到數(shù)據(jù)庫,以便統(tǒng)計(jì)設(shè)備使用情況。但是在onConnect連接的時(shí)候得不到該設(shè)備的pid,只有在 onMessage里傳來了pid才有。那該怎么得到該設(shè)備的使用情況呢
onConnect時(shí)$_SESSION里記錄個(gè)時(shí)間,onMessage里得到pid記錄到$_SESSION,onClose的時(shí)候使用$_SESSION就都得到了