【方案設計】智能家居系統中網關與服務器的連接

[導讀]基於百萬級的家庭網關與服務器保持長連接的目的,本文采用主從服務器框架進行負載均衡,心跳機制保障網關與服務器實時連接的方案。

【方案設計】智能家居系統中網關與服務器的連接

在新型智能家居系統中,家庭網關將取代 PC 機作為家庭控制中心。傳統客戶端/服務器模式不能保持家庭網關與遠程服務器實時連接。基於百萬級的家庭網關與服務器保持長連接的目的,採用主從服務器框架進行負載均衡,心跳機制保障網關與服務器實時連接的方案。

  1、新型智能家居系統整體框架

基於傳統C/S架構的智能家居系統需要保持一臺PC 機運行中間件才能達到隨時控制的目的,這與智能家居綠色節能的理念相違背。在光纖到戶的推動下,PON上行家庭網關在全國得到普及,並且有低功耗保持長時間工作的特點,適合用於智能家居系統中。

本方案設計一種新型智能家居系統,由家庭網關替代PC成為家庭網絡控制中心。圍繞家庭網關與遠程服務器互聯問題展開,探討一種適合家庭網關與遠程服務器的連接方案。基於家庭網關的智能家居系統整體框架如圖1 所示。 智能家居系統由傳感器網絡,家庭控制中心,遠程服務器,手機終端組成。其中傳感器網絡通過Zig Bee、Wi-Fi等無線通信技術組建。

【方案設計】智能家居系統中網關與服務器的連接

傳統的智能家居系統中控制中心採用家用PC 和協調器等設備,新型的智能家居系統如圖 1 所示,採用家庭網關充當家庭控制中心的角色。

  2、新型智能家居系統中家庭網關與服務器連接的設計與實現

  2.1 遠程服務器方案設計

傳統的服務器方案往往使用單一服務器模式,傳統業務不需要客戶端與服務器保持長連接,客戶端獲取數據時發送一個連接即可。並且客戶端運行在 PC 機上,客戶端對服務器發起連接後,服務器可暫存客戶端的IP 地址和端口,當服務器需要給客戶端發送數據時直接用客戶端的IP 地址和端口號即可。所以用單一服務器即能滿足傳統業務的需求。

當業務量大的時候,傳統服務器採用服務器集群技術來保證服務器不因業務量過大而癱瘓。 隨著智能家居網關用戶逐步上升,用戶將達到百萬級。 每個網關都要與服務器保持長連接,同時服務器還要與手機端通信。為了保證服務器的負載會達到百萬級時,其仍能正常其正常工作,本方案採用主從服務器框架來實現負載均衡。主服務器負責網關與服務器首次建立連接,然後根據地理位置等因素為網關分配一個從服務器並告知其 IP 等信息,網關再根據從服務器信息對從服務器發起連接,建立連接後網關與從服務器保持長連接並斷開與主服務器的連接。

主服務器對手機終端也是如此,只負責首次建立連接,判斷該手機號控制的網關分配到哪個從服務器,然後讓其對從服務器進行連接。

本方案設計的服務器框架如圖 2 所示,由主服務器和從服務器組成,網關第一次連接或者與服務器連接中斷後重連都是對主服務器發起,主服務器收到網關發起的連接信息後進行認證,查看是否在服務網關列表,認證成功後分配從服務器 IP 和服務號給網關。從服務器用於保持與網關的長連接,一方面可以對網關發送控制命令,一方面可接收網關上報的監控信息。備用主服務器用於主服務器故障時切換使用。

【方案設計】智能家居系統中網關與服務器的連接

2.2 家庭網關與遠程服務器連接方案的設計

家庭網關所屬的網絡環境為電信運營商的子網環境,IP動態更改,並且經過了多層 NAT 轉換,服務器無法對網關發起主動連接。而用戶需要隨時對家庭設備進行控制,服務器必須隨時能夠對網關發起連接。為了實現家庭網關與遠程服務器互相通信。

本方案採用 socket 長連接模式實現,服務器配置固定 IP,網關上電後發起對服務器的 socket 連接,連接成功後保持連接不中斷,服務器可通過此 socket 連接收發網關的信息。

  2.2.1 網 關與服務器長連接及意外中斷恢復的設計實現

用戶需要隨時遠程監控家庭信息,例如回家路上打開空調,離開的路上關掉電源等,網關也需要隨時向用戶反饋家庭異常,例如煙霧報警信息,所以家庭網關必須與服務器隨時保持連接。

本方案採用心跳包監控網關與服務器之間的長連接,當網關與服務器連接成功後,服務器每隔一段時間(暫時設置為 15 s)向網關發送心跳包,網關接收到心跳包後需立即回應心跳包給服務器。若超過 5 次無回應,則判定為連接斷。

服務器會將次網關在線標誌位置為0,同樣家庭網關上線後會有監控心跳線程,若連續 75 s 內無心跳信息,則會判定已與服務器斷開連接,網關會自動重啟連接服務器線程。

【方案設計】智能家居系統中網關與服務器的連接

2.2.2 家 庭網關控制權安全性的設計

家庭網關的控制權必須是保證是家庭成員,不能讓陌生人取得控制權,否則會帶來不可估量的後果。家庭網關存儲有一個可控手機號列表,必須通過本地 web 連接後才能更改,不能遠程更改(防止黑客等利用漏洞遠程添加控制權)。網關連接服務器後會上報可控手機號列表,只有在列表中的號碼才能遠程登錄服務器,並且手機遠程登錄服務器還要短信驗證碼配合,防止他人偽裝登錄。手機登錄服務器後,發送控制家庭網關的命令時會在消息頭部增加手機號信息,網關收到信息後會核對該手機號是否在本地可控手機號列表中(防止服務器的手機號列表與網關本地手機號列表不一致 )。

  2.3 家庭網關連接控制模塊工作流程

家庭網關的軟件流程如圖 4 所示,上電後初始化,然後向主服務器發送連接信息,若無法連接主服務器則向備用主服務器發送連接信息。連接上主服務器後會上報自身的一些信息,包括可控手機號列表,主服務器會根據地理位置等信息返回一個最近的從服務器序號和 IP 地址等信息,然後網關連接從服務器。

【方案設計】智能家居系統中網關與服務器的連接

若連接從服務器連接不上,則會反饋給主服務器, 主服務器會返回另一個從服務器的序號和 IP 地址信息用於連接。 連接好從服務器後,家庭網關即可實現遠程監控,但必須與從服務器保持心跳連接,才能保證其是可控狀態。

  2.4 模擬測試的測試步驟和結果

本模擬測試方案中,為使數據庫訪問效率滿足性能要求,且 PC遠程控制可直接用瀏覽器實現,主服務器採用 PHP的 YII 框架搭建的 web 服務器,手機等終端和家庭網關連接主服務器則需要建立一個 socket 連接並把數據封裝為 https協議。主服務器負責存儲網關信息,可控手機號列表等信息,並負責分發從服務器序號和 IP 給網關,查找與手機號配對的網關所在的從服務器序號和 IP 併發送給認證後的手機。

從服務器則採用 PHP 的 Workerman 框架來搭建,此框架是一個基於 PHP 的 socket 服務框架。網關與從服務器連接後保持心跳,手機獲取從服務器序號和 IP 後連接從服務器,根據網關服務號綁定與網關在同一個服務號裡,在一個服務號裡可包含多個手機,但只能一個網關,手機和網關之間可以互相通信。服務器端打開 workerman 的進程,開啟服務,如圖 5 所示。

【方案設計】智能家居系統中網關與服務器的連接

網關遠程登錄到服務器,id 為 67,服務號為 1,與服務器保持心跳連接,如圖 6 所示。瀏覽器遠程登錄,服務器認證後分配其 id 為 68,匹配到網關所在服務號為 1,向網關(id 為 67)發出指令“light1 turn on”,服務器將指令轉發給網關。

【方案設計】智能家居系統中網關與服務器的連接

【方案設計】智能家居系統中網關與服務器的連接

結語

模擬實現結果表明,通過心跳保持家庭網關與遠程服務器長連接,分配服務號保證手機與家庭網關相關聯的方案可行。用家庭網關代替傳統 PC 作為智能家居系統中家庭的控制中心,能充分利用現有家庭網關資源。


分享到:


相關文章: