SOME/IP-SD也是基于SOME/IP的報文,用來實現(xiàn)服務(wù)發(fā)現(xiàn)和事件訂閱機制。SOME/IP-SD消息通過UDP進行傳輸,報文格式如下圖所示:
Flags=重新啟動標(biāo)志+單播標(biāo)志+顯示初始數(shù)據(jù)控制標(biāo)志,如下圖所示:
服務(wù)重新啟動后,所有消息的Reboot Flag須置為1,直到Session ID重新從1開始計數(shù),之后的Reboot Flag須置為0。
Entries Array,Entry可以理解為“入口”,包含了服務(wù)實例以及需要訂閱的事件組的信息,分為Service和Eventgroup兩種類型,一個SD報文可能包含多個Entry,每個Entry大小都是16個字節(jié),一個Entry可能包含0-2個Option。下圖為一個完整的SD報文示例:
Service Entry 用于服務(wù)發(fā)現(xiàn):
Type:當(dāng)網(wǎng)絡(luò)中未收到相關(guān)服務(wù)的OfferService或者暫時未收到,而Client又需要訪問該服務(wù),那Client可以發(fā)出FindService去主動尋找服務(wù),如果Service已經(jīng)就緒的話,會回復(fù)OfferService報文;服務(wù)就緒后,主動發(fā)出OfferService,用以告知組播內(nèi)其他節(jié)點,該服務(wù)已經(jīng)啟動,可以創(chuàng)建連接;當(dāng)服務(wù)不可用時,會主動發(fā)送StopOfferService報文,用以告知組播內(nèi)其他節(jié)點,該服務(wù)目前不可用,停止發(fā)送請求,并取消訂閱。
Index 1st options:Option1排在Array里第幾個
Index 2nd options:Option2排在Array里第幾個
of opt 1:Option1的數(shù)目
of opt 2:Option2的數(shù)目
Service ID:Entry關(guān)于哪個服務(wù)
Instance ID:Entry關(guān)于服務(wù)的哪個實例,0xFFFF表示全部實例
Major Version:服務(wù)的主版本號
TTL:“入口”的生命周期,單位為秒,我理解為發(fā)現(xiàn)服務(wù)時的搜索時間,提供服務(wù)時的有效時間
Minor Version:服務(wù)的次版本號
服務(wù)發(fā)現(xiàn),說白了,就是想辦法讓服務(wù)消費者能夠找到服務(wù)提供者。打個比方,想象你在一個有很多人的廣場上找一個會唱歌的人,很顯然有兩種情況:
你認識這個人,提前說好了,他站在某個地方等你,而你知道那個地方的位置,那你肯定很容易就找到他了,這就是靜態(tài)配置;
你并不認識這個人,存在一個中間人,你告訴中間人你想找一個會唱歌的,而那個人也會告訴中間人我是會唱歌的,我站在廣場的哪個位置,然后中間人把位置給你,你就可以找到他了,這就是動態(tài)發(fā)現(xiàn),而SOME/IP-SD就是那個中間人。
Eventgroup Entry 用于事件訂閱:
Type:當(dāng)Client收到服務(wù)OfferService之后,Client可以發(fā)送Subscribe報文主動跟Service訂閱感興趣的事件組;當(dāng)Client訂閱某個事件組之后,后續(xù)發(fā)現(xiàn)不再需要改事件組的數(shù)據(jù)了,可以通過StopSubscribe報文來通知Service,避免不必要的數(shù)據(jù)交互;當(dāng)Service收到Client的Subscribe報文之后,需要先行判斷是否符合可訂閱的條件,如果該Client滿足事件組訂閱條件,則返回SubscribeAck,告知Client訂閱成功,當(dāng)事件組內(nèi)的事件準備就緒之后,Service會以某種約定好的形式發(fā)送相關(guān)事件給成功訂閱的Client,如果該Client不符合事件組訂閱條件,那Service就會直接回復(fù)SubscribeEventgroupNack,告知訂閱失敗。
Initial Data Requested Flag:如初始值由服務(wù)發(fā)送,須置為1
Counter:區(qū)分相同訂閱者的訂閱請求
Eventgroup ID:事件組ID,也就是說SOME/IP事件訂閱和取消訂閱的顆粒度到一個事件組,而不是一個事件
下面的示例,說明了一個Client發(fā)現(xiàn)服務(wù)和訂閱事件組的過程:
Options Array,Option可以理解為選項參數(shù),Type=0x01時,用于傳輸Entry的附加信息,比如服務(wù)名等等:
Type=0x04時,用于傳輸IPv4相關(guān)的參數(shù),比如服務(wù)的IP地址、TCP還是UDP、端口號:
從下圖可知,對于不同的消息,要配置的選項類型也不一樣,甚至不需要配置,其他幾種選項的具體內(nèi)容不一一列舉了
到這里,SOME/IP算介紹完了。是不是覺得如果要自己實現(xiàn)SOME/IP全部的協(xié)議,還是有點復(fù)雜的,目前GENIVI的vsomeip開源庫已經(jīng)實現(xiàn)了SOME/IP協(xié)議棧,所以通常并不用再去造輪子。換言之,我們完全可以基于vsomeip開發(fā)SOME/IP應(yīng)用程序,不用關(guān)心報文長什么樣,也不用關(guān)心服務(wù)發(fā)現(xiàn)和事件訂閱的細節(jié),拿到手已經(jīng)是Payload了,如果再用上GENIVI的CommonAPI,IDL一寫,一條命令下去,代碼自動生成了,Payload都用不著解析了,這樣就實現(xiàn)了真正的RPC。
審核編輯:劉清
-
TTL
+關(guān)注
關(guān)注
7文章
551瀏覽量
73206 -
RPC
+關(guān)注
關(guān)注
0文章
113瀏覽量
12106 -
UDP協(xié)議
+關(guān)注
關(guān)注
0文章
70瀏覽量
13418
發(fā)布評論請先 登錄
SD卡不可寫不可讀
candence 如何設(shè)置引腳不可用
TCP/IP地址不可用
為什么SPI外圍不可用時使用32雙TPIF II總線?
connect連接一個不可用的目標(biāo)服務(wù)器能不能改成非阻塞的呢
FDCAN為什么不可用?
如何處理屬性顯示不可用
車載以太網(wǎng)的SOME/IP-SD協(xié)議了解與認識
基于SOME/ IP可擴展面向服務(wù)的中間件
SOME/IP-SD有何作用
SOME/IP-SD有何作用
【服務(wù)器數(shù)據(jù)恢復(fù)】服務(wù)器raid5故障導(dǎo)致上層應(yīng)用不可用的數(shù)據(jù)恢復(fù)案例

【服務(wù)器數(shù)據(jù)恢復(fù)】EMC存儲崩潰導(dǎo)致上層應(yīng)用不可用的數(shù)據(jù)恢復(fù)案例
DNS服務(wù)器可能不可用什么意思
排查并處理共享站點S1用戶面路徑不可用告警

評論