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