1. 程式人生 > >《連載 | 物聯網框架ServerSuperIO教程》1.4種通訊模式機制。附小文:招.NET開發,結果他轉JAVA了,一切都是為了生活

《連載 | 物聯網框架ServerSuperIO教程》1.4種通訊模式機制。附小文:招.NET開發,結果他轉JAVA了,一切都是為了生活

參考文章:

一、感慨

      上大學的時候,沒有學過C#,花了5塊錢在地壇書市買了一本教程,也就算是正式入行了。後來深造,學過JAVA,後來迫於生計,打算轉JAVA了。後來考慮考慮,自己寫的框架還是有很大發展餘地,後來還是在C#的陣地上堅持了下來。從一開始的雛形,到SuperIO的產品化,再到伺服器端的ServerSuperIO,也是慢慢演化而來。後期打算把ServerSuperIO移植到嵌入式裝置上,以及完善開發文件。本來不想提這些,但是今天打算招一個C#開發人員(B/S方面),是群友,可是人家要轉JAVA開發了,也只能說緣分不到,無法在一起做事,後面附一些聊天記錄,供大家職業發展參考。

二、答疑

        有人問,你這個框架和SuperSocket、netty......有什麼區別?ServerSuperIO是通訊框架不?是;ServerSuperIO支援高併發不?理論上支援;ServerSuperIO支援跨平臺不?在Ubuntu上跑過。但是這些並不是ServerSuperIO起初設計的初發點,它繼承了SuperIO的設計思想,後期才逐步的向服務端發展,加強通訊能力、跨平臺等等。

        ServerSuperIO是一個物聯網框架,首先是以裝置(感測器)為核心構建的框架,裝置(感測器)的協議無關性,可以隨意掛載裝置驅動在框架下執行。所以ServerSuperIO本質上協調裝置驅動(協議)、IO通道(COM和NET)、執行機制(模式)之間的關係,使之無縫結合、執行。

        一直在工業領域混,做整合系統、遠端監測監控等等,所以ServerSuperIO不僅僅是一個通訊框架,更多的是結合了工作實踐經驗,本著能夠解決實質問題。

三、執行控制模式

1、輪詢模式

    這是框架最早的執行模式,串列埠和網路通訊時都可以使用這種控制模式。當有多個裝置 連線到通訊平臺時,通訊平臺會輪詢排程裝置進行通訊任務。某一時刻只能有一個裝置傳送請求命令、等待接收返回資料,這個裝置完成傳送、接收(如果遇到超時 情況,則自動返回)後,下一個裝置才進行通訊任務,依次輪詢裝置。

    應用場景是這樣的,服務端與裝置進行通訊遵循呼叫應答的方式,也就是IO可用的情況下,服務端先發起通訊命令請求,裝置根據命令資訊,檢驗通過後返回資料給服務端。這種通訊模式很好理解,每個裝置的通訊都遵循排隊的原則。但是如果某個裝置的命令需要及時傳送,怎麼辦?ServerSuperIO框架是支援裝置優先級別排程的,例如:對某個裝置要進行實時的檢測,需要連續傳送命令,那麼就需要對裝置進行高級別設定,傳送請求資料命令。

    通訊結構如下圖:

 

2、併發模式

    網路通訊的情況下,輪詢模式顯然效率比較低,那麼可以採用併發模式。併發通訊模式是集中傳送給所有裝置請求指令,框架是採用迴圈同步方式傳送請求命令給每個IO通道對應的裝置,當然也可以採用並行非同步方式集中傳送請求命令。硬體裝置接收到指令後進行校驗,校驗成功後返回對應指令的資料,通訊平臺非同步監聽到資料資訊後,進行接收操作,然後再進行資料的分發、處理等。

    那麼這裡就涉及到IO通道接收到的資料是非同步接收的,如何才能和裝置驅動匹配上(把資料分發到裝置驅動上),這是能過DeviceCode和DeviceIP兩種方式來實現的。DeviceCode可以是裝置地址或是裝置編碼,DeviceIP是預先設定好的引數,要求終端裝置的IP地址是固定的。

    通訊結構如下圖:

 

3、自控模式

    只有網路通訊時可以使用這種控制模式。自控通訊模式與併發通訊模式類似,區別在於傳送指令操作交給裝置驅動本身進行控制,或者說交給二次開發者,二次開發者可以通過時鐘定時用事件驅動的方式傳送指令資料。硬體設 備接收到指令後進行校驗,校驗成功後返回對應指令的資料,通訊平臺非同步監聽到資料資訊後,進行接收操作,然後再進行資料的分發、處理等。

    自控通訊模式可以為二次開發者提供精確的定時請求實時資料機制,使通訊機制更靈活、自主,如果多個裝置驅動使用同一個IO通道的話,時間控制會有偏差。

    同樣涉及到資料的分發,和併發模式一樣。

    通訊結構如下圖:

 

4、單例模式

    只有網路通訊時可以使用這種控制模式。在一個服務例項內只能有一個裝置驅動,相當於一個裝置驅動對應著N多個硬體裝置終端。更適合通訊的資料協議有固定的標準,以命令關鍵字處理不同的資料。適用於高併發的硬體終端裝置主動上傳資料,伺服器端根據資料資訊進行處理和返回相應的資料。

    通訊結構如下圖:

 

四、招.NET開發,結果他轉JAVA了,一切都是為了生活

     最近工作比較忙,開發、解決問題、招聘......,連看手機的時間都沒有了,吃飯也是匆匆了事。為了更好的推進平臺化建設,確實需要人,也為將來儲備人才,在群裡和網友聊聊,本來小夥前期還是挺感興趣的。今天問問他的想法,結果打算轉JAVA了,也是我文章前頭感慨的原因。我為了生存,他也為了生存,都是可以理解的。

     聊天記錄如下,請參考: