javascript下一代物聯網開發
Jeff Atwood曾提出“任何能夠用JavaScript實現的應用,最終都必將用JavaScript實現”他對JavaScript的推崇不言而喻。而當下這個物聯網大熱的時代,JavaScript支持HTTP和JSON、支持函數式編程、可提供交互式環境等特點堪稱適用于物聯網全棧開發。本文詳解了JavaScript可參與的每一個物聯網過程,并針對開源項目進行了匯總。
物聯網節點JavaScript開發
網絡中,HTTP協議與JSON數據格式特別是RESTful API無疑具有支配地位,各種云服務,數據傳輸都基于這些協議來進行。而JavaScript為HTTP和JSON提供了最好的支持,當物聯網系統采用JavaScript開發時,天然對接了互聯網上海量的云服務與云資源,包括云存儲、云計算等一系列資源都可被方便調用,就像你在手機端訪問各種云服務一樣。微服務構架在服務器端的興起,讓JavaScript編寫的每一個物聯網節點都可以作為一個大系統中的微服務,通過RESTfulAPI接口提供自己的服務。
在設計模式上,JavaScript的回調與事件循環等基于事件驅動的編程模型非常適合物聯網。在物聯網環境下,環境在不斷變化,物聯網節點要不斷對環境的變動做出響應,換句話說物聯網系統通常是I/O密集型的系統,回調與事件循環高效地完成了密集I/O操作這項工作,而事件響應式編程相比于多進程和多線程編程在內存的使用上又非常高效,而這又是物聯網系統所需要的,通常物聯網系統都是資源受限系統,內存與CPU的頻率都非常有限。物聯網節點底層開發中通常采用中斷響應模式,在CPU中由稱為中斷控制器的硬件來檢查中斷信號的出現,并在中斷出現后控制CPU執行特定程序片段,這一執行模式和JavaScript的回調一致,很容易使用JavaScript回調機制來實現硬件的中斷響應。
物聯網節點的部署特點決定了其回收維護成本非常高昂甚至是不可接受的。而物聯網節點要不斷應對新的環境與應用需求,所以在開發中物聯網節點的遠程部署與更新是非常重要的一個功能。JavaScript本來就是實現從服務器端向客戶端部署的一門語言,其天然就具有在網路上實現遠程部署的屬性,實現起來就像你用瀏覽器下載JavaScript腳本并運行一樣簡單。JavaScript的熱部署也是一個比較熱門的研究領域,通過熱部署,物聯網節點可以實現在運行過程中遠程添加新功能,遠程修正bug。
前面講了使用JavaScript來做物聯網開發的好處,那么也有必要講一下JavaScript在物聯網應用中相對于Web應用的不同以及誤區。第一個問題就是實時性。作為嵌入式系統的物聯網網關,首要面對的就是實時性問題,比如各種電機的控制,一些電壓信號的采集都是有實時性要求的,需要在規定的時間內完成所需工作。由于JavaScript的內存管理使用垃圾收集機制,所以必然存在由于垃圾收集而導致應用中斷執行的情況,甚至有可能在一些情況下造成實時性要求遭到破壞。所以在設計JavaScript物聯網實時程序時需要考慮內存垃圾數據時間對實時性的影響。當然,也可以采用另一個設計模式,就是把實時任務使用C語言編寫的單獨線程來實現,利用JavaScript的單線程特點,這種設計模式不會在嵌入式系統中占用過多的資源,畢竟JavaScript本來就是一種嵌入在瀏覽器里的語言。
另一方面,由于物聯網網關是需要長期運行的設備,相對于Web端需要有更高的可靠性與穩定性,所以單元測試與集成測試是必須的,而且需要使用代碼分析工具保證代碼沒有任何內存及文件句柄的泄漏。即使在垃圾收集環境下,內存泄漏也是存在的,而在嵌入式系統中由于內存有限,特別容易泄漏。好在服務器端JavaScript的開發應用已經有很長一段時間了,可以從服務器開發里借鑒不少工具。



