indy是阻塞式(blocking)的
當你使用winsock開發網路應用程式時,從socket中讀取資料或者向socket寫入資料都是非同步發生的,這樣就不會阻斷程式中其它**的執行。在收到資料時,winsock會向應用程式傳送相應的訊息。這種訪問方式被稱作非阻塞式連線,它要求你對事件作出響應,設定狀態機,並通常還需要乙個等待迴圈。與通常的winsock程式設計方法不同的是,indy使用了阻塞式socket呼叫方式。阻塞式訪問更像是檔案訪問。當你讀取資料,或是寫入資料時,讀取和寫入函式將一直等到相應的操作完成後才返回。比如說,發起網路連線只需呼叫connect方法並等待它返回,如果該方法執行成功,在結束時就直接返回,如果未能成功執行,則會丟擲相應的異常。同檔案訪問不同的是,socket呼叫可能會需要更長的時間,因為要讀寫的資料可能不會立即就能準備好(在很大程度上依賴於網路頻寬)。
windows上使用阻塞式socket開發應用程式具有如下優點:
1 :程式設計簡單——阻塞式socket應用程式很容易編寫。所有的使用者**都寫在同乙個地方,並且順序執行。
2 :容易向unix移植——由於unix也使用阻塞式socket,編寫可移植的**就變得比較容易。indy就是利用這一點來實現其多平台支援而又單一源**的設計。
3 :很好地利用了執行緒技術——阻塞式socket是順序執行的,其固有的封裝特性使得它能夠很容易地使用到執行緒中。
阻塞式socket的弱點
事物都具有兩面性,阻塞式socket也不例外。它的乙個主要的缺點就是使客戶程式的使用者介面「凍結」。當在程式的主線程中進行阻塞式socket呼叫時,由於要等待socket呼叫完成並返回,這段時間就不能處理使用者介面訊息,使得update、repaint以及其它訊息得不到及時響應,從而導致使用者介面被「凍結」。
使用tidantifreeze
對抗「凍結」
indy使用了執行緒技術
阻塞式socekt通常都採用執行緒技術,indy也是如此。從最底層開始,indy的設計都是執行緒化的。因此用indy建立伺服器和客戶程式跟在unix下十分相似,並且delphi的快速開發環境和indy對winsock的良好封裝使得應用程式建立更加容易。
indy伺服器模型
乙個典型的unix伺服器有乙個或多個監聽程序,它們不停地監聽進入的客戶連線請求。對於每乙個需要服務的客戶,都fork乙個新程序來處理該客戶的所有事務。這樣乙個程序只處理乙個客戶連線,程式設計就變得十分容易。
indy伺服器工作原理同unix伺服器十分類似,只是windows不像unix那樣支援fork,而是支援執行緒,因此indy伺服器為每乙個客戶連線分配乙個執行緒。
圖1顯示了indy伺服器的工作原理。indy伺服器元件建立乙個同應用程式主線程分離的監聽執行緒來監聽客戶連線請求,對於接受的每乙個客戶,都建立乙個新的執行緒來為該客戶提供服務,所有與這一客戶相關的事務都由該執行緒來處理。
使用元件tidthreadmgrpool,indy還支援執行緒池。
在Delphi7 0下安裝DSPack
一 廢話幾句 從去年年底起,有幸也轉到了directshow方面開發。在論壇中也可以為一些初學者解答一些初級問題了 如果是win2k,安裝之前,必須先安裝directx9.0 dspack2.3.4預設支援directx9.0 二 在delphi7.0下安裝dspack 又是廢話,原本在dspack...
用Delphi7 0實現漂亮的漢字視窗
在視覺化開發的時代,窗體是絕大部分應用程式的核心,但是開發者也許已對windows一成不變的方形窗體感到厭煩。其實巧妙地使用api函式即可實現漢字形狀的窗體。本文的例項執行後將顯示乙個由 電腦報 三個漢字作為外形的窗體。當然你還可以利用本期講的方法實現更有個性的漢字視窗。設計思路 1 使用begin...
突破Delphi 7 0程式設計例項五十講 pdg格式
內容簡介 本書融合了在windows下利用delphi 7.0開發應用程式的理論和實踐,全面而深入地介紹了利用delphi 7.0開發應用程式的常用方法和技巧。內容包括使用者介面設計 圖形影象程式設計 檔案管理 多 技術 系統控制 網路和資料庫程式設計以及遊戲製作等內容。編輯推薦 delphi是物件...