• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    電磁頻譜監(jiān)測系統(tǒng)中間件設(shè)計實現(xiàn)方法

    2020-11-02 03:00:11趙明芳劉軍楊青趙世偉
    衛(wèi)星電視與寬帶多媒體 2020年18期
    關(guān)鍵詞:中間件

    趙明芳 劉軍 楊青 趙世偉

    【摘要】基于gRPC框架設(shè)計實現(xiàn)電磁頻譜監(jiān)測系統(tǒng)中間件,主要包括:定義gRPC服務(wù)、實現(xiàn)客戶端與服務(wù)端功能。實踐表明該方法通用性好,適用于架構(gòu)分布式測試系統(tǒng),能夠滿足自動測試方向的需求。

    【關(guān)鍵詞】電磁頻譜監(jiān)測系統(tǒng);中間件;遠程過程調(diào)用;gRPC

    中圖分類號:TN92? ? ? ? ? ? ? ? ?文獻標識碼:A? ? ? ? ? ? ? ?文章編號:1673-0348(2020)018-084-03

    Abstract: Based on the gRPC framework, a design and realization method of middleware in electromagnetic spectrum monitoring system including gRPC service defining, realizing client and server functions is presented in this paper. Good testing result shows that this method has good versatility, is suitable for the architecture of distributed test system, and can meet the needs of automatic testing.

    Key words: Electromagnetic Spectrum Monitoring System; middleware; Remote Procedure Call; gRPC

    1.引言

    隨著計算機技術(shù)和網(wǎng)絡(luò)通信技術(shù)的發(fā)展,分布式技術(shù)在計算機的工程應用領(lǐng)域,例如:數(shù)據(jù)信息管理、自動化等方面取得快速發(fā)展,并應用于自動測試系統(tǒng)的分布式部署中,即基于局域網(wǎng)與互聯(lián)網(wǎng),把分散在不同地點、不同測試能力的計算機、設(shè)備組合在一起,實現(xiàn)遠程自動化測試與測試資源共享。電磁頻譜監(jiān)測系統(tǒng)屬于分布式測試系統(tǒng),它具備的一個重要能力是遠程過程控制功能,中間件技術(shù)為這種分布式架構(gòu)方法提供了有力保障,使用該技術(shù)可獨立于平臺與語言實現(xiàn)遠程過程調(diào)用、數(shù)據(jù)庫訪問、消息傳遞等服務(wù),從而實現(xiàn)電磁頻譜監(jiān)測系統(tǒng)中不同監(jiān)測角色(如:客戶端、服務(wù)器、設(shè)備)的靈活組態(tài)、遠程測試、以及資源共享與管理。

    分布式測試系統(tǒng)中,各種應用不是部署在一個進程(/主機)中,通?;赗PC(Remote Procedure Call,遠程過程調(diào)用)協(xié)議實現(xiàn)對遠程計算機服務(wù)的調(diào)用。RPC遵從server/client模型,實際使用時,客戶端調(diào)用服務(wù)端提供的接口就如同本地調(diào)用,且不需要開發(fā)網(wǎng)絡(luò)通信和協(xié)議層的功能,只需關(guān)心業(yè)務(wù)相關(guān)的服務(wù)。目前有多種RPC框架用于開發(fā)實現(xiàn)網(wǎng)絡(luò)進程間通信,例如:Dubbox 、thrift ,gRPC等。其中g(shù)RPC 框架是一個由谷歌開發(fā)的語言中立、平臺中立、開源的 RPC 框架,它面向 HTTP/2 設(shè)計、使用 protobuf 作為數(shù)據(jù)序列化協(xié)議,并且具有解析速度快,序列化數(shù)據(jù)體積小,可擴展性高,使用簡單等特性,相比其他RPC框架而言,發(fā)展空間更大。

    2. 電磁頻譜監(jiān)測系統(tǒng)中間件設(shè)計與實現(xiàn)

    2.1 整體框架設(shè)計

    實際的測試場景中,監(jiān)測系統(tǒng)的客戶端與服務(wù)端物理位置分離,兩端通過網(wǎng)絡(luò)連接,中間件位于客戶端與服務(wù)端中間,實現(xiàn)了兩者之間的遠程應用程序調(diào)用、數(shù)據(jù)序列化與數(shù)據(jù)傳輸功能??蛻舳耸怯脩魳I(yè)務(wù)的入口,接收用戶的監(jiān)測意圖,即服務(wù)消費方,通過中間件調(diào)用服務(wù)端提供的對應服務(wù)。該服務(wù)執(zhí)行時,操作監(jiān)測設(shè)備,獲取測量數(shù)據(jù),經(jīng)服務(wù)端分析、處理后再經(jīng)過中間件將測量結(jié)果返回客戶端,從而實現(xiàn)客戶端的業(yè)務(wù)功能。

    遠程過程調(diào)用中間件框架如圖1所示:

    2.2 gRPC安裝與部署

    基于gRPC框架開發(fā)中間件,需要預先在目標平臺上安裝gRPC庫、配置 gRPC運行環(huán)境、安裝 protocol buffer 以及gRPC插件來編譯系統(tǒng)定義的服務(wù)。首先,確定目標平臺和語言,這里選擇Windows操作系統(tǒng),目標語言為C++;接著,安裝目標語言的IDE開發(fā)環(huán)境(Visual Studio 2015);最后,通過vcpkg包管理工具便捷地實現(xiàn)第三方開發(fā)庫(gRPC庫等)的管理以及與IDE的集成。

    2.3 定義gRPC服務(wù)

    首先,按照要求生成gRPC服務(wù)接口。gRPC通過 Protobuf(Google protocol buffers)定義服務(wù)以及生成客戶端與服務(wù)端的接口執(zhí)行代碼。Protobuf 是谷歌提出的一種數(shù)據(jù)序列化協(xié)議,它的語言無關(guān)、平臺無關(guān)、可擴展的特性,使得它十分適合用于gRPC框架實現(xiàn)數(shù)據(jù)傳輸。它最大的特點是能夠根據(jù)用戶自定義的遠程調(diào)用服務(wù)文件(.proto文件)轉(zhuǎn)換成目標語言的頭文件與接口實現(xiàn)文件,從而用戶可以方便地調(diào)用服務(wù)接口函數(shù),實現(xiàn)客戶端請求的服務(wù)功能。定義gRPC服務(wù)需要兩步:

    1) 編寫proto文件

    proto文件相當于待傳輸?shù)南⒛0澹x了需要傳輸?shù)臄?shù)據(jù)本身,主要包括服務(wù)端與客戶端的接口和消息。

    ·接口:是客戶端與服務(wù)端遠程過程調(diào)用的函數(shù)接口,該接口定義可表達四種類型RPC方法(例如:簡單RPC、流式RPC)。接口定義需遵循規(guī)定的格式,即由service 關(guān)鍵字引導具體的服務(wù)接口名稱,大括號內(nèi)包含具體的RPC方法(服務(wù)接口函數(shù))列表,格式如下:

    service 服務(wù)接口名稱

    {

    rpc 函數(shù)名(請求) returns (響應){ }

    ......

    }

    ·消息:定義不同消息類型(例如:enum,message)包含的字段。格式如下:

    消息類型關(guān)鍵字消息名稱

    {

    消息字段1;

    ......

    消息字段n;

    }

    2) 編譯proto文件

    由于proto文件不能直接使用,也不能直接傳輸,所以需要通過protobuf編譯器(protoc.exe),將proto文件轉(zhuǎn)換為目標語言的頭文件和源文件(C++語言對應的是.h與.cc文件),生成的文件中包含了對上述proto文件中定義的消息字段的讀寫函數(shù),以及服務(wù)端與客戶端的接口調(diào)用函數(shù)。經(jīng)過這一步就將語言中立的proto文件的信息轉(zhuǎn)換為接口與消息的C++類(包含數(shù)據(jù)與方法),下一步就是在生成的目標語言代碼的基礎(chǔ)上,開發(fā)服務(wù)端與客戶端的功能。

    2.4 實現(xiàn)服務(wù)端

    首先,VS2015新建server項目(控制臺項目),并設(shè)置項目屬性,主要包括:

    1) 添加gRPC的宏定義:_WIN32_WINNT=0x0600;

    2) 指定目標語言的頭文件(.h)和源文件(.cc)所在目錄,并將源文件添加到項目;

    3) 添加windows socket庫ws2_32.lib。

    接著,編碼實現(xiàn)服務(wù)端接口功能:按照上述proto文件定義的service服務(wù)接口,依次實現(xiàn)包含的服務(wù)接口函數(shù)功能,即從自動生成的接口類 Service(.grpc.pb.h 文件中,自動生成的服務(wù)接口文件。)派生自定義C++類,并重寫該類的服務(wù)端接口虛函數(shù)。代碼段示例:

    //文件xx.grpc.pb.h中定義的server接口

    class Service : public ::grpc::Service

    {

    public:

    Service();

    virtual ~Service();

    virtual ::grpc::Status teamFile(::grpc::ServerContext* context,

    const::DEPARTMENT::Identity* request, ::DEPARTMENT::Profile* response);

    };

    //類TeamService派生自類Service,需重寫接口函數(shù)teamFile,實現(xiàn)服務(wù)端功能。

    class TeamService final : public teamData::Service

    {

    public:

    TeamService ();

    virtual ~ TeamService ();

    public:

    Status teamFile(ServerContext* context, const Identity* request, Profile* response) override;

    private:

    void editTeam(const string& id, const string& name, Gender gender);

    private:

    map m_file;

    };

    最后,構(gòu)建并啟動server端服務(wù),監(jiān)聽指定的地址和端口,等待接收來自客戶端的服務(wù)請求。代碼段示例:

    int main(int argc, char** argv)

    {

    std::string server_address("127.0.0.1:50051"); //server端監(jiān)聽地址和端口

    TeamService service; //服務(wù)類對象

    ServerBuilder builder;

    builder.AddListeningPort(server_address, grpc::InsecureServerCredentials());

    builder.RegisterService(&service);

    std::unique_ptr server(builder.BuildAndStart()); //構(gòu)建服務(wù)并運行

    cout << "Server listen on" << server_address << endl;

    server->Wait();

    return 0;

    }

    2.5 實現(xiàn)客戶端

    首先,新建client項目,并設(shè)置項目屬性,方法同server端項目屬性設(shè)置方法。

    接著,編碼實現(xiàn)client功能:按照proto文件中定義的接口,調(diào)用client端同名接口函數(shù),從而測試 server端服務(wù)接口功能是否正確。開發(fā)客戶端功能不必像實現(xiàn)server端功能那樣編碼實現(xiàn)具體的服務(wù)實現(xiàn)過程,而是委托Stub類對象調(diào)用客戶端的接口函數(shù)即可。

    最后,編譯生成client項目,查錯直至成功。

    2.6 運行測試

    基于gRPC框架實現(xiàn)的遠程過程調(diào)用,以server/client模型實現(xiàn)。實際程序員做的工作就是在目標IDE中按照gRPC要求的接口、數(shù)據(jù)規(guī)范分別實現(xiàn)服務(wù)端與客戶端的功能,而gRPC框架實現(xiàn)了兩端的通信,所以服務(wù)端與客戶端的程序編譯生成成功后,可直接測試服務(wù)接口功能。

    測試方法是:通過分別運行客戶端與服務(wù)端程序,客戶端向服務(wù)端發(fā)送服務(wù)請求,驗證是否調(diào)用成功服務(wù)端接口函數(shù),并獲得預期結(jié)果。具體步驟如下:

    step1.根據(jù)目標平臺與版本,選擇并打開client端與server端可執(zhí)行程序所在目錄;

    step2.運行server端可執(zhí)行程序,根據(jù)提示信息,確認服務(wù)端是否構(gòu)建并運行成功,并進入監(jiān)聽狀態(tài);

    step3.運行client端可執(zhí)行程序:根據(jù)命令行提示輸入請求命令,進行服務(wù)接口測試,查看server端的響應結(jié)果,并驗證。

    3. 結(jié)論

    基于gRPC框架設(shè)計實現(xiàn)中間件,是將復雜的系統(tǒng)模塊功能或業(yè)務(wù)拆分為多個服務(wù)功能,且每部分可獨立并行開發(fā)、測試以及環(huán)境部署,實現(xiàn)了功能高內(nèi)聚、接口低耦合。各服務(wù)進程獨立,互相協(xié)作配合,實現(xiàn)用戶業(yè)務(wù)功能。同時gRPC框架完成了網(wǎng)絡(luò)數(shù)據(jù)傳輸與序列化,能夠有效提升網(wǎng)絡(luò)傳輸效率。該遠程過程調(diào)用中間件設(shè)計實現(xiàn)方法已應用于某電磁頻譜監(jiān)測系統(tǒng)軟件開發(fā)中,測試結(jié)果表明其平臺適應性好,中間件可靠、穩(wěn)定,傳輸數(shù)據(jù)體積小、速度快,能夠滿足電磁頻譜監(jiān)測系統(tǒng)分布式部署與測試需求。

    參考文獻:

    [1] 劉龍,王偉平,劉遠飛.自動測試系統(tǒng)的發(fā)展現(xiàn)狀及前景[J].飛機設(shè)計, 2007(04):71-74.

    [2] 馬雄.基于微服務(wù)架構(gòu)的系統(tǒng)設(shè)計與開發(fā)[D].南京:南京郵電大學,2017.

    [3] 宋瑾.基于ProtocolBuffer協(xié)議的服務(wù)端-客戶端通信[J].電腦編程技巧與維護,2014(12):100-101.

    [4] 劉宏,吳江.分布式對象中間件技術(shù)[J].現(xiàn)代電子技術(shù),2003(08):91-94.

    猜你喜歡
    中間件
    我國自主可控中間件發(fā)展研究
    RFID中間件技術(shù)及其應用研究
    電子制作(2018年14期)2018-08-21 01:38:10
    基于VanConnect中間件的設(shè)計與開發(fā)
    電子測試(2018年10期)2018-06-26 05:54:02
    基于Android 平臺的OSGi 架構(gòu)中間件的研究與應用
    電子制作(2017年13期)2017-12-15 09:00:21
    機載計算機中間件技術(shù)研究
    電子測試(2017年11期)2017-12-15 08:52:15
    RFID中間件發(fā)展與趨勢研究
    電腦與電信(2015年4期)2015-03-24 10:48:24
    以實力證明 用事實說話
    中間件在高速公路領(lǐng)域的應用
    云計算環(huán)境下中間件的負載均衡機制研究
    基于SAF規(guī)范的高可用電信中間件設(shè)計
    永和县| 商丘市| 海淀区| 东丰县| 南漳县| 通海县| 恩施市| 丰城市| 枣阳市| 庆云县| 奉节县| 临漳县| 嘉禾县| 江门市| 伊春市| 阳谷县| 张家口市| 太康县| 综艺| 萝北县| 通河县| 兴文县| 平罗县| 望都县| 余干县| 措勤县| 长泰县| 咸阳市| 新河县| 南城县| 新绛县| 开远市| 务川| 边坝县| 澄迈县| 三台县| 石楼县| 交城县| 台湾省| 仙游县| 喀什市|