版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、軟件系問可般口族雌軟件接口是實(shí)現(xiàn)一個(gè)系統(tǒng)跟另外系統(tǒng)進(jìn)行信息交互的橋梁,在不同的系統(tǒng)之間, 根據(jù)系統(tǒng)的關(guān)聯(lián)程度的不同存在緊耦合和松耦合兩種:緊耦合要求接口響應(yīng)反應(yīng)快, 消息不能阻塞;松耦合對(duì)響應(yīng)反應(yīng)要求比較低。在目前應(yīng)用中,Socket、消息隊(duì)列 (Message Queue)、WebService等都有相應(yīng)的應(yīng)用,但是應(yīng)用中發(fā)現(xiàn)各通訊方式有 自己固有的特征,適合的才是最好的”,這是真理。在接口和系統(tǒng)信息交互的過程中,兩種模式使用得很普遍:同步調(diào)用和異步調(diào)用, 同步調(diào)用要求接口發(fā)出請(qǐng)求消息后必須等待服務(wù)端系統(tǒng)的應(yīng)答消息,接口阻塞直至超 時(shí);異步調(diào)用則發(fā)出請(qǐng)求消息后,接口可以從事其它處理,定時(shí)輪詢
2、服務(wù)端應(yīng)答消息 和消息或事件通知。同步方式簡單,但是很容易造成接口阻塞,造成消息積圧超時(shí)。際實(shí)現(xiàn) Socket 通訊Socket通訊相對(duì)來說是很古老的通訊方式,也是最常用的通訊方式。Socket通 訊有阻塞和非阻塞兩種方式。在同步方式,采用阻塞編程比較簡單,但是為了防止接 口阻塞,我們需要設(shè)置Socket超時(shí),因此可以使用Socket的SELECT模型(參考 如下示例代碼):ReceLen二0;CurReceLen=O;for(;)iResuIt二select (0, &fdread, NULL, NULL, &timeout);if(iResult=O)AfxMessageB
3、oxC接收應(yīng)答消息超時(shí)! ! !,MB_0K MB_IC0NERR0R); closesocket (Socket);return FALSE;CurReceLen 二 recv(Socket, oBuf+ReceLen, len, NO_FLAG_SET);if(CurReceLen>0) && (CurReceLen != S0CKET_ERR0R)oBufReceLen+CurReceLen0 ;memcpy(char *)&MsgLen, oBuf, sizeof(W0RD32);MsgLen二ntohl(MsgLen);if(ReceLen+CurRec
4、eLenMsgLen)ReceLen+二CurReceLen;break;ReceLen+二CurReceLen;在異步方式下,采用非阻塞方式實(shí)現(xiàn)比較方便,在非阻塞方式下可使用 WSAAsyncSelect 模型和 WSAEventSelect 模型:WSAAsyncSelect 模型基于消息, WSAEventSelect模型基于事件,下面的示例代碼設(shè)置了 Socket進(jìn)行讀寫和關(guān)閉操作 的消息:status = WSAAsyncSelect (TempSocket, hWnd, WSA_READ, FD_READ | FD_CL0SE FD_WRITE);if (status = S0CK
5、ET_ERR0R)Writ eLogFile(z,Se t st ream socket module fail! ! IP(%s), Por t(%d) and error (%<1) “,GetlPAddr (PeerMap+node) ->IPAddr), (PeerMap+node) ->PeerPortNo, WS AGetLastError ();CloseSocket(TempSocket, _LINE , _FILE );return FALSE;無論使用阻塞方式或非阻塞方式編程,需要重點(diǎn)考慮的一個(gè)問題:粘包現(xiàn)象,即 應(yīng)用發(fā)送兩個(gè)或以上的數(shù)據(jù)包,在Socket
6、通訊層將數(shù)據(jù)包合并成一個(gè)發(fā)送出去,因 此接收端收到數(shù)據(jù)包以后需要對(duì)數(shù)據(jù)包根據(jù)應(yīng)用定義的長度進(jìn)行拆分,否則導(dǎo)致應(yīng)用 層丟包。應(yīng)用方式可以由用戶封轉(zhuǎn)成DLL供使用方使用.消息隊(duì)列(Message Queue)利用MSMQ (Microsoft Message Queue),應(yīng)用程序開發(fā)人員可以通過發(fā)送和接收 消息方便地與應(yīng)用程序進(jìn)行快速可靠的通信。消息處理為您提供了有保障的消息傳遞 和執(zhí)行許多業(yè)務(wù)處理的可靠的防故障方法。MSMQ與XML Web Services和.Net Remoting 樣,是一種分布式開發(fā)技術(shù)。但是在使用XML Web Services或.Met Remoting組件時(shí),Cl
7、ient端需要和Server端實(shí)時(shí)交換信息,Server需要保持聯(lián)機(jī)。 MSMQ則可以在Server離線的情況下工作,將Message臨時(shí)保存在Client端的消息隊(duì) 列中,以后聯(lián)機(jī)時(shí)再發(fā)送到Server端處理。顯然,MSMQ不適合于Client需要Server 端及時(shí)響應(yīng)的這種情況,MSMQ以異步的方式和Server端交互,不用擔(dān)心等待Server 端的長時(shí)間處理過程。雖然XML Web Services和.Net Remoting都提供了 OneWay 屬性來處理異步調(diào)用,用來解決Server端長方法調(diào)用長時(shí)間阻礙Client端。但是不 能解決大量Client負(fù)載的問題,此時(shí)Server接
8、受的請(qǐng)求快于處理請(qǐng)求。一般情況下, OneWay屬性不用于專門的消息服務(wù)中。1. 基本術(shù)語和概念(Basic terms and concepts )“消息”是在兩臺(tái)計(jì)算機(jī)間傳送的數(shù)據(jù)單位。消息可以非常簡單,例如只包含文本字 符串;也可以更復(fù)雜,可能包含嵌入對(duì)象。消息被發(fā)送到隊(duì)列中?!跋㈥?duì)列”是在 消息的傳輸過程中保存消息的容器。消息隊(duì)列管理器在將消息從它的源中繼到它的目 標(biāo)時(shí)充當(dāng)中間人。隊(duì)列的主要目的是提供路由并保證消息的傳遞;如果發(fā)送消息時(shí)接 收者不可用,消息隊(duì)列會(huì)保留消息,直到可以成功地傳遞它?!跋㈥?duì)列”是Microsoft 的消息處理技術(shù),它在任何安裝了 Microsoft Win
9、dows的計(jì)算機(jī)組合中,為任何應(yīng)用 程序提供消息處理和消息隊(duì)列功能,無論這些計(jì)算機(jī)是否在同一個(gè)網(wǎng)絡(luò)上或者是否同 時(shí)聯(lián)機(jī)?!跋㈥?duì)列網(wǎng)絡(luò)”是能夠相互間來回發(fā)送消息的任何一組計(jì)算機(jī)。網(wǎng)絡(luò)中的 不同計(jì)算機(jī)在確保消息順利處理的過程中扮演不同的角色。它們中有些提供路由信息 以確定如何發(fā)送消息,有些保存整個(gè)網(wǎng)絡(luò)的重要信息,而有些只是發(fā)送和接收消息?!跋㈥?duì)列”安裝期間,管理員確定哪些服務(wù)器可以互相通信,并設(shè)置特定服務(wù)器的 特殊角色。構(gòu)成此“消息隊(duì)列”網(wǎng)絡(luò)的計(jì)算機(jī)稱為“站點(diǎn)”,它們之間通過“站點(diǎn)鏈 接”相互連接。每個(gè)站點(diǎn)鏈接都有一個(gè)關(guān)聯(lián)的“開銷”,它由管理員確定,指示了經(jīng) 過此站點(diǎn)鏈接傳遞消息的頻率?!跋?/p>
10、隊(duì)列”管理員還在網(wǎng)絡(luò)中設(shè)置一臺(tái)或多臺(tái)作為“路由服務(wù)器”的計(jì)算機(jī)。路由 服務(wù)器查看各站點(diǎn)鏈接的開銷,確定經(jīng)過多個(gè)站點(diǎn)傳遞消息的最快和最有效的方法, 以此決定如何傳遞消息。2. 隊(duì)列類型(Queue Type )有兩種主要的隊(duì)列類型:由您或網(wǎng)絡(luò)中的其他用戶創(chuàng)建的隊(duì)列和系統(tǒng)隊(duì)列。用戶創(chuàng)建 的隊(duì)列可能是以下任何一種隊(duì)列:“公共隊(duì)列”在整個(gè)“消息隊(duì)列”網(wǎng)絡(luò)中復(fù)制,并 且有可能由網(wǎng)絡(luò)連接的所有站點(diǎn)訪問?!皩S藐?duì)列”不在整個(gè)網(wǎng)絡(luò)中發(fā)布。相反,它 們僅在所駐留的本地計(jì)算機(jī)上可用。專用隊(duì)列只能由知道隊(duì)列的完整路徑名或標(biāo)簽的 應(yīng)用程序訪問?!肮芾黻?duì)列”包含確認(rèn)在給定“消息隊(duì)列”網(wǎng)絡(luò)中發(fā)送的消息回執(zhí)的 消息。指定希
11、望MessageQueue組件使用的管理隊(duì)列(如果有的話)。“響應(yīng)隊(duì)列” 包含目標(biāo)應(yīng)用程序接收到消息時(shí)返回給發(fā)送應(yīng)用程序的響應(yīng)消息。指定希望 MessageQueue組件使用的響應(yīng)隊(duì)列(如果有的話)。系統(tǒng)生成的隊(duì)列一般分為以下 兒類:“日記隊(duì)列”可選地存儲(chǔ)發(fā)送消息的副本和從隊(duì)列中移除的消息副本。每個(gè)“消 息隊(duì)列”客戶端上的單個(gè)日記隊(duì)列存儲(chǔ)從該計(jì)算機(jī)發(fā)送的消息副本。在服務(wù)器上為每 個(gè)隊(duì)列創(chuàng)建了一個(gè)單獨(dú)的日記隊(duì)列。此日記跟蹤從該隊(duì)列中移除的消息。“死信隊(duì)列” 存儲(chǔ)無法傳遞或已過期的消息的副本。如果過期或無法傳遞的消息是事務(wù)性消息,則 被存儲(chǔ)在一種特殊的死信隊(duì)列中,稱為“事務(wù)性死信隊(duì)列”。死信存儲(chǔ)在
12、過期消息所 在的計(jì)算機(jī)上。有關(guān)超時(shí)期限和過期消息的更多信息,請(qǐng)參見默認(rèn)消息屬性?!皥?bào)告 隊(duì)列”包含指示消息到達(dá)目標(biāo)所經(jīng)過的路由的消息,還可以包含測試消息。每臺(tái)計(jì)算 機(jī)上只能有一個(gè)報(bào)告隊(duì)列?!皩S孟到y(tǒng)隊(duì)列”是一系列存儲(chǔ)系統(tǒng)執(zhí)行消息處理操作所 需的管理和通知消息的專用隊(duì)列。在應(yīng)用程序中進(jìn)行的大多數(shù)工作都涉及訪問公共隊(duì) 列及其消息。但是,根據(jù)應(yīng)用程序的日記記錄、確認(rèn)和其他特殊處理需要,在日常操 作中很可能要使用兒種不同的系統(tǒng)隊(duì)列。3. 同步和異步通信(Synchronous VS. Asynchronous Communication )隊(duì)列通信天生就是異步的,因?yàn)閷⑾l(fā)送到隊(duì)列和從隊(duì)列中接收消息
13、是在不同的進(jìn) 程中完成的。另外,可以異步執(zhí)行接收操作,因?yàn)橐邮障⒌娜丝梢詫?duì)任何給定的 隊(duì)列調(diào)用BeginReceive方法,然后立即繼續(xù)其他任務(wù)而不用等待答復(fù)。這與人們所 了解的“同步通信”截然不同。在同步通信中,請(qǐng)求的發(fā)送方在執(zhí)行其他任務(wù)前,必 須等待來自預(yù)定接收方的響應(yīng)。發(fā)送方等待的時(shí)間完全取決于接收方處理請(qǐng)求和發(fā)送 響應(yīng)所用的時(shí)間。4. 同消息隊(duì)列交互(Interacting with Message Queues )消息處理和消息為基于服務(wù)器的應(yīng)用程序組件之間的進(jìn)程間通信提供了強(qiáng)大靈活的機(jī) 制。同組件間的直接調(diào)用相比,它們具有若干優(yōu)點(diǎn),其中包括:穩(wěn)定性一組件失敗對(duì)消息的影響程度遠(yuǎn)遠(yuǎn)
14、小于組件間的直接調(diào)用,因?yàn)橄⒋鎯?chǔ)在 隊(duì)列中并一直留在那里,直到被適當(dāng)?shù)靥幚?。消息處理同事?wù)處理相似,因?yàn)橄⑻?理是有保證的。消息優(yōu)先級(jí)一更緊急或更重要的消息可在相對(duì)不重要的消息之前 接收,因此可以為關(guān)鍵的應(yīng)用程序保證足夠的響應(yīng)時(shí)間。脫機(jī)能力一發(fā)送消息時(shí), 它們可被發(fā)送到臨時(shí)隊(duì)列中并一直留在那里,直到被成功地傳遞。當(dāng)因任何原因?qū)λ?需隊(duì)列的訪問不可用時(shí),用戶可以繼續(xù)執(zhí)行操作。同時(shí),其他操作可以繼續(xù)進(jìn)行,如 同消息己經(jīng)得到了處理一樣,這是因?yàn)榫W(wǎng)絡(luò)連接恢復(fù)時(shí)消息傳遞是有保證的。事務(wù) 性消息處理一將多個(gè)相關(guān)消息耦合為單個(gè)事務(wù),確保消息按順序傳遞、只傳遞一次 并且可以從它們的目標(biāo)隊(duì)列中被成功地檢索。
15、如果出現(xiàn)任何錯(cuò)誤,將取消整個(gè)事務(wù)。 安全性一MessageQueue組件基于的消息隊(duì)列技術(shù)使用Windows安全來保護(hù)訪問控 制,提供審核,并對(duì)組件發(fā)送和接收的消息進(jìn)行加密和驗(yàn)證。5. 在.Net環(huán)境下編寫簡單的Message Queue程序(1) 先安裝 Message Queuing Services通過 Control Panel,'Add/Remove Programs ” - "Add/Remove Windows Components " 步驟安裝1SIQ。MSMQ可以安裝為工作組模式或域模式。如果安裝程序沒有找到一臺(tái) 運(yùn)行提供目錄服務(wù)的消息隊(duì)列的服務(wù)器
16、,則只可以安裝為工作組模式,此計(jì)算機(jī)上的 “消息隊(duì)列”只支持創(chuàng)建專用隊(duì)列和創(chuàng)建與其他運(yùn)行“消息隊(duì)列”的計(jì)算機(jī)的直接連 接。(2)配置 1SHQ扌丁開 Computer Managem ent - Message Queuing, 在 Priva te Queues 卜 創(chuàng)建 MSMQDemo 隊(duì)列(3)編寫代碼一簡單演示MSMQ對(duì)象MessageQueue類是"消息隊(duì)列"周圍的包裝。MessageQueue類提供對(duì)“消息隊(duì)列” 隊(duì)列的引用??梢栽贛essageQueue構(gòu)造函數(shù)中指定一個(gè)連接到現(xiàn)有資源的路徑,或 者可在服務(wù)器上創(chuàng)建新隊(duì)列。在調(diào)用Send、Peek或Recei
17、ve之前,必須將 MessageQueue類的新實(shí)例與某個(gè)現(xiàn)有隊(duì)列關(guān)聯(lián)。MessageQueue支持兩種類型的消息 檢索:同步和異步。同步的Peek和Receive方法使進(jìn)程線程用指定的間隔時(shí)間等待 新消息到達(dá)隊(duì)列。異步的BeginPeek和BeginReceive方法允許主應(yīng)用程序任務(wù)在消 息到達(dá)隊(duì)列之前,在單獨(dú)的線程中繼續(xù)執(zhí)行。這些方法通過使用回調(diào)對(duì)象和狀態(tài)對(duì)象 進(jìn)行工作,以便在線程之間進(jìn)行信息通訊。/ Send Messageprivate void btnSendMessage_Click(object sender, System. EventArgs e)/ Open queueS
18、ystem Messaging MessageQueue queue = newSystem Messaging MessageQueue (: Private$MSMQDemo;/ Create messageSystem. Messaging. Message message 二 new System. Messaging. Message ();message Body 二 txtMessage Text Trim(); message .Forma tter 二 new System. Messaging. XmlMessageFormatter (new Type typeof(st
19、ring);/ Put message into queuequeue Send(message);/ Receive Messageprivate void btnReceiveMessage_Click(object sender, System. EventArgs e)/ Open queueSystem Messaging MessageQueue queue 二 newSystem Messaging MessageQueue(" Private$MSMQDemo,z);/ Receive message,同步的Receive方法阻塞當(dāng)前執(zhí)行線程,直到一個(gè)message可
20、 以得到System Afessaging .Message message 二 queue Receive ();message .Formatter 二 new System. Messaging. XmlMessageFormatter (new Type typeof(string);txtReceiveMessage Text 二 message Body. ToStringO;Demo界面: WebServiceSOAP作為一種協(xié)議,同服務(wù)端WebService進(jìn)行通訊。微軟提供了 SOAP協(xié)議的 SDK,我使用的是微軟的SOAP Toolkit3. 0,這是基于COM的一套組件,因此具有COM 的特征,在調(diào)用參數(shù)的處理,windows和unix順
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 石河子大學(xué)《醫(yī)學(xué)統(tǒng)計(jì)學(xué)》2021-2022學(xué)年第一學(xué)期期末試卷
- 石河子大學(xué)《食品貯藏與保鮮》2022-2023學(xué)年第一學(xué)期期末試卷
- 石河子大學(xué)《結(jié)構(gòu)力學(xué)一》2022-2023學(xué)年第一學(xué)期期末試卷
- 石河子大學(xué)《復(fù)變函數(shù)》2022-2023學(xué)年第一學(xué)期期末試卷
- 智慧高速解決方案
- 沈陽理工大學(xué)《審計(jì)學(xué)》2022-2023學(xué)年第一學(xué)期期末試卷
- 2018年四川內(nèi)江中考滿分作文《我心中的英雄》13
- 沈陽理工大學(xué)《化工工藝設(shè)計(jì)》2022-2023學(xué)年第一學(xué)期期末試卷
- 沈陽理工大學(xué)《產(chǎn)品仿生學(xué)應(yīng)用設(shè)計(jì)》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣州海珠區(qū)法院判決繼續(xù)履行勞動(dòng)合同的案例
- 嬰幼兒發(fā)展引導(dǎo)員
- 產(chǎn)品系統(tǒng)設(shè)計(jì)開發(fā) 課件 第3、4章 產(chǎn)品系統(tǒng)設(shè)計(jì)程序與方法、產(chǎn)品系統(tǒng)設(shè)計(jì)類型
- 華為ipd流程管理
- 電子信息工程技術(shù)專業(yè)職業(yè)生涯規(guī)劃書
- GB/T 29711-2023焊縫無損檢測超聲檢測焊縫內(nèi)部不連續(xù)的特征
- 世界各國國家代號(hào)、區(qū)號(hào)、時(shí)差
- Talent5五大職業(yè)性格測試技巧138答案
- 工程水文學(xué)題庫及題解(全)
- 【學(xué)生基本信息表】樣本
- 環(huán)境監(jiān)測儀器設(shè)備采購?fù)稑?biāo)方案(技術(shù)標(biāo))
- 薄壁不銹鋼管卡壓連接施工工藝
評(píng)論
0/150
提交評(píng)論