欢迎来到天天文库
浏览记录
ID:41848806
大小:275.51 KB
页数:11页
时间:2019-09-03
《JSON程式设计–使用过滤器》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、JSON程式設計-使用過濾器在以前Tiburon遊記的文章解釋過JSON是使用字串型態來傳遞資料的,因此所有其他型態的資料都必須轉換為字串的型態,雖然如此一來在處理上比較簡單,但這也造成了其他的問題,例如一些敏感性的資料如果使用字串型態來傳遞的話就會有問題。DataSnap2010^了解決這種問題因此加入了過濾器的機制,讓開發人員在傳遞特殊的資料時可以藉由過濾器來進行額外的處理,例如在傳遞資料出去時先加密,並且在接受到資料Z後再進行解密。木篇文章的目的即在於討論如何使用DataSnap2010的過濾器。使用
2、DataSnap2010的過濾器非常的簡單,Delphi2010也內建了一個壓縮過濾器,可以有效的壓縮使用TCP/IP通訊協定的資料傳遞。讓我們先說明如何使用這個內建的過濾器,稍後我們再深入的說明如何開發客製化過濾器。讓我們仍然使用上篇文章的範例,要使用過濾器,請開啟ServerContainerUnit程式單元,點選表單屮的TDSTCPServerTransport元件,並且雙擊它的F订ters特性,此時Fliters特性值編輯器會啟動,請於其中加入一個新的過濾器,點選此新的過濾器,然後在物件檢視器中選擇
3、它的Filtcrld為ZlibComprcssion,如下所示:TTransportFikerCollectior>[0]
4、Properties»FilterldZLibCompressionProperties(TFrfterProperties)BEditingDSTCPSci...t?X?<--TTranffloetAkerltemZlibCompression過濾器就是DataSnap2010內建的壓縮過濾器,在加入了Z1ibCompression過濾器之後,編譯並且執彳亍範例DataSnap伺服器
5、,現在DataSnap伺服器就提供了壓縮JSON資料的能力。現在再讓我們開啟用戶端應用程式,因為我們要在用戶端應用程式中加入解壓縮資料的能力,這個非常的簡單,我們只要在用戶端應用程式的主表單中加入使用DBXCompressionFi11er程式單元即可,例如下面就是用戶端應用程式加入DBXCompressionFilter程式單元的程式碼:implementationusesDBXJSONReflect,DBXJSON,uServerProxy,uEmployee,DBXCompressionFilter;
6、現在編譯並且執行用戶端應用程式,並且讓我們使用TCPViewer來觀察使用黙縮過濾器之前的情形以及使用壓縮過濾器之後的效果。下圖是TCPViewer顯示範例DataSnap應用系統使用壓縮過濾器之丽的情形,從卜•圖中我們可以看到在DataSnap伺服器和用戶端應用程式Z間傳遞的資料當然是使用字串的型態,所冇傳遞的資料都一清二楚,同時請讀者注意下圖右邊顯示了從伺服器傳遞到用戶端的資料量(938位元組)以及從用戶端傳遞到伺服端的資料量(706位元組)。而下圖則是使用壓•縮過濾器Z後的效果:從上圖屮可以看到傳遞的
7、資料經過壓縮,因此不易看出原始的資料,I肛冃請讀者注意下圖右邊顯示了從伺服器傳遞到用戶端的資料量(653位元組)以及從用戶端傳遞到伺服端的資料量(602位元組),可見到壓縮過濾器有效的減少了伺服器和用戶端之間的資料傳遞量,這不但可以壇加分散式應用程式的執行速度,也可以增加支援的用戶端的數量。如何?使用過濾器是不是乂簡單,乂有明顯的效果?不過DataSnap2010只提供了一個內建的過濾器實在太少,好在DataSnap2010過濾器架構在設計時就考慮到了允許讓開發人員能夠自行開發過濾器並且內嵌到DataSna
8、p之中,接下來筆者將討論如何開發客製化過濾器並口使用在DataSnap2010的分散式應用系統屮。開發客製化過濾器要開發客製化過濾器,開發人員必須從TTransportFilter類別衍生子代類別並口實作TTransportFilter類別中相關的虛擬方法,下面的表單說明了開發人員需要實作的虛擬方法:函式名稱回傳型態說明GetPareimetersTDBXStringArray冋傳所有的參數GetUscrParamctcrsTDBXStringArray回傳使用者可改變的參數ProcessinputTByt
9、es使用客製化程式碼正向處理傳遞的資料流ProcessOutputTBytes使用客製化程式碼反向處理傳遞的資料流Id
10、Unicodestring過濾器的IDGetParameterValueLnicodeString取得特定名稱的參數值SetParameterValueBoolean設定特定名稱的參數值瞭解了需耍實作那些虛擬方法之後,我們就可以開始動手開發一個客製化過濾器To在本文中筆者將撰寫一個非常簡單的加密
此文档下载收益归作者所有