版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、 軟件系統(tǒng)之間的接口方式 概述 軟件接口是實現(xiàn)一個系統(tǒng)跟另外系統(tǒng)進行信息交互的橋梁,在不同的系統(tǒng)之間,根據(jù)系統(tǒng)的關(guān)聯(lián)程度的不同存在緊耦合和松耦合兩種:緊耦合要求接口響應(yīng)反應(yīng)快,消息不能阻塞;松耦合對響應(yīng)反應(yīng)要求比較低。在目前應(yīng)用中, Socket 、消息隊列(Message Queue)、 WebService等都有相應(yīng)的應(yīng)用,但是應(yīng)用中發(fā)現(xiàn)各通訊方式有自己固有的特征,“適合的才是最好的”,這是真理。 在接口和系統(tǒng)信息交互的過程中,兩種模式使用得很普遍:同步調(diào)用和異步調(diào)用,同步調(diào)用要求接口發(fā)出請求消息后必須等待服務(wù)端系統(tǒng)的應(yīng)答消息,接口阻塞直至超時;異步調(diào)用則發(fā)出請求消息后,接口可
2、以從事其它處理,定時輪詢服務(wù)端應(yīng)答消息和消息或事件通知。同步方式簡單,但是很容易造成接口阻塞,造成消息積壓超時。 技術(shù)實現(xiàn) Socket 通訊 Socket 通訊相對來說是很古老的通訊方式,也是最常用的通訊方式。 Socket 通訊有阻塞和非阻塞兩種方式。在同步方式,采用阻塞編程比較簡單,但是為了防止接口阻塞,我們需要設(shè)置 Socket 超時,因此可以使用 Socket 的 SELECT 模型(參考如下示例代碼): ReceLen=0; CurReceLen=0; for(;) iResult=select(0,&fdread,NULL,NULL,&
3、timeout); if(iResult=0) AfxMessageBox("接收應(yīng)答消息超時!",MB_OK|MB_ICONERROR); closesocket(Socket); return FALSE; CurReceLen = recv(Socket, oBuf+ReceLen, len, NO_FLAG_SET); if(CurReceLen>0) && (CurReceLen != SOCKET_ERROR) oBufReceLen+CurReceLen='0' memcpy(char *)&MsgLen,oBuf
4、,sizeof(WORD32); MsgLen=ntohl(MsgLen); if(ReceLen+CurReceLen=MsgLen) ReceLen+=CurReceLen; break; ReceLen+=CurReceLen; 在異步方式下,采用非阻塞方式實現(xiàn)比較方便,在非阻塞方式下可使用WSAAsyncSelect模型和 WSAEventSelect 模型: WSAAsyncSelect模型基于消息, WSAEventSelect 模型基于事件,下面的示例代碼設(shè)置了 Socket 進行讀寫和關(guān)閉操作的消息: status = WSAAsyncSelect(TempSocket, hW
5、nd, WSA_READ, FD_READ | FD_CLOSE | FD_WRITE); if (status = SOCKET_ERROR) WriteLogFile("Set stream socket module fail!IP(%s),Port(%d) and error(%d)",GetIPAddr(PeerMap+node)->IPAddr),(PeerMap+node)->PeerPortNo,WSAGetLastError(); CloseSocket(TempSocket,_LINE_,_FILE_); return FALSE; 無論使用
6、阻塞方式或非阻塞方式編程,需要重點考慮的一個問題:粘包現(xiàn)象,即應(yīng)用發(fā)送兩個或以上的數(shù)據(jù)包,在 Socket 通訊層將數(shù)據(jù)包合并成一個發(fā)送出去,因此接收端收到數(shù)據(jù)包以后需要對數(shù)據(jù)包根據(jù)應(yīng)用定義的長度進行拆分,否則導致應(yīng)用層丟包。應(yīng)用方式可以由用戶封轉(zhuǎn)成DLL供使用方使用. 消息隊列(Message Queue)利用 MSMQ(Microsoft Message Queue),應(yīng)用程序開發(fā)人員可以通過發(fā)送和接收消息方便地與應(yīng)用程序進行快速可靠的通信。消息處理為您提供了有保障的消息傳遞和執(zhí)行許多業(yè)務(wù)處理的可靠的防故障方法。 MSMQ與XML Web Services和.Net Remot
7、ing一樣,是一種分布式開發(fā)技術(shù)。但是在使用XML Web Services或.Net Remoting組件時,Client端需要和Server端實時交換信息,Server需要保持聯(lián)機。MSMQ則可以在Server離線的情況下工作,將Message臨時保存在Client端的消息隊列中,以后聯(lián)機時再發(fā)送到Server端處理。 顯然,MSMQ不適合于Client需要Server端及時響應(yīng)的這種情況,MSMQ以異步的方式和Server端交互,不用擔心等待Server端的長時間處理過程。 雖然XML Web Services和.Net Remoting都提供了OneWay屬性來處理異步調(diào)用,用來解決S
8、erver端長方法調(diào)用長時間阻礙Client端。但是不能解決大量Client負載的問題,此時Server接受的請求快于處理請求。 一般情況下,OneWay屬性不用于專門的消息服務(wù)中。 1. 基本術(shù)語和概念( Basic terms and concepts ) “消息”是在兩臺計算機間傳送的數(shù)據(jù)單位。消息可以非常簡單,例如只包含文本字符串;也可以更復雜,可能包含嵌入對象。 消息被發(fā)送到隊列中?!跋㈥犃小笔窃谙⒌膫鬏斶^程中保存消息的容器。消息隊列管理器在將消息從它的源中繼到它的目標時充當中間人。隊列的主要目的是提供路由并保證消息的傳遞;如果發(fā)送消息時接收者不可用,消息隊列會保留消息,直到可以
9、成功地傳遞它。 “消息隊列”是 Microsoft 的消息處理技術(shù),它在任何安裝了 Microsoft Windows 的計算機組合中,為任何應(yīng)用程序提供消息處理和消息隊列功能,無論這些計算機是否在同一個網(wǎng)絡(luò)上或者是否同時聯(lián)機。 “消息隊列網(wǎng)絡(luò)”是能夠相互間來回發(fā)送消息的任何一組計算機。網(wǎng)絡(luò)中的不同計算機在確保消息順利處理的過程中扮演不同的角色。它們中有些提供路由信息以確定如何發(fā)送消息,有些保存整個網(wǎng)絡(luò)的重要信息,而有些只是發(fā)送和接收消息。 “消息隊列”安裝期間,管理員確定哪些服務(wù)器可以互相通信,并設(shè)置特定服務(wù)器的特殊角色。構(gòu)成此“消息隊列”網(wǎng)絡(luò)的計算機稱為“站點”,它們之間通過“站點鏈接”相
10、互連接。每個站點鏈接都有一個關(guān)聯(lián)的“開銷”,它由管理員確定,指示了經(jīng)過此站點鏈接傳遞消息的頻率。 “消息隊列”管理員還在網(wǎng)絡(luò)中設(shè)置一臺或多臺作為“路由服務(wù)器”的計算機。路由服務(wù)器查看各站點鏈接的開銷,確定經(jīng)過多個站點傳遞消息的最快和最有效的方法,以此決定如何傳遞消息。 2. 隊列類型( Queue Type ) 有兩種主要的隊列類型:由您或網(wǎng)絡(luò)中的其他用戶創(chuàng)建的隊列和系統(tǒng)隊列。 用戶創(chuàng)建的隊列可能是以下任何一種隊列: “公共隊列”在整個“消息隊列”網(wǎng)絡(luò)中復制,并且有可能由網(wǎng)絡(luò)連接的所有站點訪問。 “專用隊列”不在整個網(wǎng)絡(luò)中發(fā)布。相反,它們僅在所駐留的本地計算機上可用。專用隊列只能由知道隊列的完
11、整路徑名或標簽的應(yīng)用程序訪問。 “管理隊列”包含確認在給定“消息隊列”網(wǎng)絡(luò)中發(fā)送的消息回執(zhí)的消息。指定希望MessageQueue 組件使用的管理隊列(如果有的話)。 “響應(yīng)隊列”包含目標應(yīng)用程序接收到消息時返回給發(fā)送應(yīng)用程序的響應(yīng)消息。指定希望 MessageQueue 組件使用的響應(yīng)隊列(如果有的話)。 系統(tǒng)生成的隊列一般分為以下幾類: “日記隊列”可選地存儲發(fā)送消息的副本和從隊列中移除的消息副本。每個“消息隊列”客戶端上的單個日記隊列存儲從該計算機發(fā)送的消息副本。在服務(wù)器上為每個隊列創(chuàng)建了一個單獨的日記隊列。此日記跟蹤從該隊列中移除的消息。 “死信隊列”存儲無法傳遞或已過期的消息的副本。
12、如果過期或無法傳遞的消息是事務(wù)性消息,則被存儲在一種特殊的死信隊列中,稱為“事務(wù)性死信隊列”。死信存儲在過期消息所在的計算機上。有關(guān)超時期限和過期消息的更多信息,請參見默認消息屬性。 “報告隊列”包含指示消息到達目標所經(jīng)過的路由的消息,還可以包含測試消息。每臺計算機上只能有一個報告隊列。 “專用系統(tǒng)隊列”是一系列存儲系統(tǒng)執(zhí)行消息處理操作所需的管理和通知消息的專用隊列。 在應(yīng)用程序中進行的大多數(shù)工作都涉及訪問公共隊列及其消息。但是,根據(jù)應(yīng)用程序的日記記錄、確認和其他特殊處理需要,在日常操作中很可能要使用幾種不同的系統(tǒng)隊列。 3. 同步和異步通信( Synchronous VS. Asynchro
13、nous Communication ) 隊列通信天生就是異步的,因為將消息發(fā)送到隊列和從隊列中接收消息是在不同的進程中完成的。另外,可以異步執(zhí)行接收操作,因為要接收消息的人可以對任何給定的隊列調(diào)用 BeginReceive 方法,然后立即繼續(xù)其他任務(wù)而不用等待答復。這與人們所了解的“同步通信”截然不同。 在同步通信中,請求的發(fā)送方在執(zhí)行其他任務(wù)前,必須等待來自預(yù)定接收方的響應(yīng)。發(fā)送方等待的時間完全取決于接收方處理請求和發(fā)送響應(yīng)所用的時間。 4. 同消息隊列交互( Interacting with Message Queues ) 消息處理和消息為基于服務(wù)器的應(yīng)用程序組件之間的進程間通信提供了
14、強大靈活的機制。同組件間的直接調(diào)用相比,它們具有若干優(yōu)點,其中包括: 穩(wěn)定性 組件失敗對消息的影響程度遠遠小于組件間的直接調(diào)用,因為消息存儲在隊列中并一直留在那里,直到被適當?shù)靥幚怼O⑻幚硗聞?wù)處理相似,因為消息處理是有保證的。 消息優(yōu)先級 更緊急或更重要的消息可在相對不重要的消息之前接收,因此可以為關(guān)鍵的應(yīng)用程序保證足夠的響應(yīng)時間。 脫機能力 發(fā)送消息時,它們可被發(fā)送到臨時隊列中并一直留在那里,直到被成功地傳遞。當因任何原因?qū)λ桕犃械脑L問不可用時,用戶可以繼續(xù)執(zhí)行操作。同時,其他操作可以繼續(xù)進行,如同消息已經(jīng)得到了處理一樣,這是因為網(wǎng)絡(luò)連接恢復時消息傳遞是有保證的。 事務(wù)性消息處理 將多
15、個相關(guān)消息耦合為單個事務(wù),確保消息按順序傳遞、只傳遞一次并且可以從它們的目標隊列中被成功地檢索。如果出現(xiàn)任何錯誤,將取消整個事務(wù)。 安全性 MessageQueue 組件基于的消息隊列技術(shù)使用 Windows 安全來保護訪問控制,提供審核,并對組件發(fā)送和接收的消息進行加密和驗證。 5. 在 .Net 環(huán)境下編寫簡單的 Message Queue 程序 (1)先安裝Message Queuing Services 通過Control Panel,“Add/Remove Programs” “Add/Remove Windows Components”步驟安裝MSMQ。 MSMQ可以安裝為工作組模
16、式或域模式。如果安裝程序沒有找到一臺運行提供目錄服務(wù)的消息隊列的服務(wù)器,則只可以安裝為工作組模式,此計算機上的“消息隊列”只支持創(chuàng)建專用隊列和創(chuàng)建與其他運行“消息隊列”的計算機的直接連接。 (2)配置MSMQ 打開Computer Management Message Queuing,在Private Queues下創(chuàng)建MSMQDemo隊列 (3)編寫代碼簡單演示MSMQ對象 MessageQueue 類是“消息隊列”周圍的包裝。MessageQueue 類提供對“消息隊列”隊列的引用??梢栽?MessageQueue 構(gòu)造函數(shù)中指定一個連接到現(xiàn)有資源的路徑,或者可在服務(wù)器上創(chuàng)建新隊列。在調(diào)用
17、 Send、Peek 或 Receive 之前,必須將 MessageQueue 類的新實例與某個現(xiàn)有隊列關(guān)聯(lián)。 MessageQueue 支持兩種類型的消息檢索:同步和異步。同步的 Peek 和 Receive 方法使進程線程用指定的間隔時間等待新消息到達隊列。異步的 BeginPeek 和 BeginReceive 方法允許主應(yīng)用程序任務(wù)在消息到達隊列之前,在單獨的線程中繼續(xù)執(zhí)行。這些方法通過使用回調(diào)對象和狀態(tài)對象進行工作,以便在線程之間進行信息通訊。 / Send Message private void btnSendMessage_Click(object sender, Syste
18、m.EventArgs e) / Open queue System.Messaging.MessageQueue queue = new System.Messaging.MessageQueue(".Private$MSMQDemo"); / Create message System.Messaging.Message message = new System.Messaging.Message(); message.Body = txtMessage.Text.Trim(); message.Formatter = new System.Messaging.XmlM
19、essageFormatter(new Type typeof(string); / Put message into queue queue.Send(message); / Receive Message private void btnReceiveMessage_Click(object sender, System.EventArgs e) / Open queue System.Messaging.MessageQueue queue = new System.Messaging.MessageQueue(".Private$MSMQDemo"); / Rece
20、ive message, 同步的Receive方法阻塞當前執(zhí)行線程,直到一個message可以得到 System.Messaging.Message message = queue.Receive(); message.Formatter = new System.Messaging.XmlMessageFormatter(new Type typeof(string); txtReceiveMessage.Text = message.Body.ToString(); Demo界面: WebService SOAP 作為一種協(xié)議,同服務(wù)端 WebService 進行通訊。微軟提供了 SOAP 協(xié)議的 SDK ,我使用的是微軟的 SOAP Toolkit3.0 ,這是基于 COM 的一套組件,因此具有 COM 的特征,在調(diào)用參數(shù)的處理, windows 和 unix 順序恰好相反,下面的代碼實現(xiàn)了調(diào)用一個 Web Service : if(!
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 浙江省金華市2024年中考數(shù)學一模試題含答案
- 開封文化藝術(shù)職業(yè)學院《創(chuàng)新與創(chuàng)業(yè)管理A》2023-2024學年第一學期期末試卷
- 江蘇警官學院《現(xiàn)代舞基訓》2023-2024學年第一學期期末試卷
- 吉安職業(yè)技術(shù)學院《機器人技術(shù)基礎(chǔ)B》2023-2024學年第一學期期末試卷
- 湖南理工學院南湖學院《廣播電視新聞播音與主持》2023-2024學年第一學期期末試卷
- 黑龍江建筑職業(yè)技術(shù)學院《CA課件設(shè)計》2023-2024學年第一學期期末試卷
- 高考物理總復習《磁場的性質(zhì)》專項測試卷帶答案
- 重慶對外經(jīng)貿(mào)學院《快速建筑設(shè)計》2023-2024學年第一學期期末試卷
- 鎮(zhèn)江市高等??茖W?!妒称芳庸ぐ踩刂啤?023-2024學年第一學期期末試卷
- 浙江交通職業(yè)技術(shù)學院《粉體工程與設(shè)備》2023-2024學年第一學期期末試卷
- 《榜樣9》觀后感心得體會四
- 《住院患者身體約束的護理》團體標準解讀課件
- 酒店一線員工績效考核指標體系優(yōu)化研究
- 全面設(shè)備管理(TPM)培訓資料-課件
- 高中地理《外力作用與地表形態(tài)》優(yōu)質(zhì)課教案、教學設(shè)計
- 車間生產(chǎn)管理流程圖模板
- 河北省邢臺市各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名居民村民委員會明細
- 市場部績效考核表
- 10000中國普通人名大全
- 學霸高中數(shù)學高中數(shù)學筆記全冊(最終)
- 熱棒的要點及要求
評論
0/150
提交評論