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


