【說明】
這個例子答應大家很久了,一直沒有時間弄,現在正式結合MyBean插件可以很友善的在用戶端共享操作連接配接,執行資料庫的各項工作,屏蔽了底層的通信解碼器編碼等工作,直接傳遞Variant,給了開發者足夠的領活和自由。
【服務端使用技術】
diocp3:擔當底層的通信任務。
qworker/iocpTask:擔當業務邏輯的處理工作,diocp3接受資料解碼後用qworker/iocpTask将資料包投遞出來,這樣不用占用通信線程。
qmsgpack:負責将傳遞的将variant資料打包到流,從流中解碼成variant
dataModule:對應連接配接的對象,友善進行開發。
【用戶端】
myBean:制作基于MyBean架構的插件,可以在MyBean的架構子產品中直接使用。
RawTcpClient:用于和服務端進行通信,阻塞的tcp用戶端,類似IdTcpClient的精簡版本,操作容易。
【DEMO使用】
說 明:用戶端依賴diocp_bean.dll插件與伺服器進行資料交換,DIOCP_DBDEMO.dll是示範窗體插件的宿主。
存放路徑:MyBean\samples\diocp-DBDEMO
啟動服務:SERVER_EXE\diocp3Server.exe <點選start按鈕啟動服務>

伺服器是基于DIOCP3的。可以在DIOCP3項目中找到源碼[diocp3\samples\socket-Coder\DataModuleDEMO]
啟動用戶端:打開 [simpleConsole.exe], 依次點選下面的按鈕就可以看到效果了
【DEMO說明】
服務端處理:
服務端基于DIOCP3通信,該DEMO做了簡單的封裝,使使用者可以專注于邏輯的實作,和用戶端互動使用variant類型進行。
dmMain,是和用戶端連接配接想對應的一個對象[和用戶端的連接配接是一對一的關系]。
我在裡面稍微做了下邏輯處理的示範:
vData,是用戶端傳遞過來的參數,也是傳回給用戶端的資料。vData是OleVariant可以容納任何的資料<配合qmsgPack可以達到任何的資料格式要求>, 如果還達不到你的格式要求,你可以在MyClientContext的dataReceived函數做些修改,下面代碼的處理過程依次是:
解壓收到的資料->QmsgPack解包->取出用戶端傳入的參數->調用dmMain.Execute處理邏輯->qmsgPack編碼資料->壓縮資料->回傳資料到用戶端
用戶端處理:
編譯的 DLL 放到和EXE同一個目錄下面就可以進行自動加載。
用戶端diocp_bean工程中
注冊的diocpRemoteSvr插件實作了IRemoteServer接口和IRemoteServerConnector接口,而且該插件為單件模式。其他任何地方調用都隻會産生一個連接配接執行個體。
示範操作窗體:<服務端是13K的成語記錄>
相應按鈕代碼:
PS: 其他功能大家自己去實作,該文章寫了好幾個中午,希望對大家有用。
由于qdac開源項目 >=D2007,是以D7下面不能編譯服務端,和diocp_bean.項目(你可以在D2007中編譯好diocp_bean和服務端工程,其他插件可以在d7中完成)
-----------------------------------------------------------------------------------------------------
MyBean 輕量級配置開源架構 開源位址
<a href="https://git.oschina.net/ymofen/delphi-framework-MyBean">https://git.oschina.net/ymofen/delphi-framework-MyBean</a>
DIOCP3開源位址
<a href="https://github.com/ymofen/diocp3">https://github.com/ymofen/diocp3</a>
qdac項目資訊
官方QQ群:250530692
SVN檢出位址:
<a href="http://svn.code.sf.net/p/qdac3/code/">http://svn.code.sf.net/p/qdac3/code/</a>
svn://svn.code.sf.net/p/qdac3/code/