純b/s以“請求-響應(yīng)”的方式進行工作,browse端只有不斷向web server端請求新的網(wǎng)頁,才能進行數(shù)據(jù)更新,因此,browse端具有被動性和滯后性,無法及時獲取實時的數(shù)據(jù)及其改變情況,而且即使網(wǎng)頁中僅有部分數(shù)據(jù)發(fā)生了變化,server端也必須重新發(fā)送整張網(wǎng)頁,從而加重了服務(wù)器、網(wǎng)絡(luò)的負擔(dān),降低了數(shù)據(jù)傳輸、應(yīng)用的效率。如何克服這個b/s模式的缺陷,堵住那些說vf不能很好做b/s的臭嘴,就是下面要介紹的一些方法:
引入數(shù)據(jù)推送技術(shù),實現(xiàn)browse中的網(wǎng)頁自動粒狀更新
這種push技術(shù)就是由server端主動發(fā)送各種已經(jīng)更新的數(shù)據(jù)給browse,不必發(fā)送完整的網(wǎng)頁,browse端根據(jù)所接受到的數(shù)據(jù)對網(wǎng)頁進行局部的更新。
為此需要在server端編制vf的數(shù)據(jù)推送程序,在browse端的網(wǎng)頁嵌入數(shù)據(jù)接受程序。另外,如果考慮browse端的操作系統(tǒng)和瀏覽器具有的不確定性,也就是所謂的跨平臺應(yīng)用,數(shù)據(jù)就用XML封裝?!?BR> 1、推送數(shù)據(jù)的vf程序的流程
a、在特定的端口偵聽browse的連接請求(或者說檢測用戶是否請求登錄);
b、browse端請求建立連接(登錄);
c、建立browse連接列表(建立已經(jīng)登錄的用戶列表);
d、如browse斷開連接,則從連接列表中刪除該連接;
e、server端更新數(shù)據(jù)的采集、XML封裝;
f、server推送數(shù)據(jù)到所有的在線的(已經(jīng)連接的)browse端?!?BR> 2、數(shù)據(jù)推送程序的基本規(guī)則(基于 Flash 的 web 嵌入式數(shù)據(jù)接受程序)
a、發(fā)送數(shù)據(jù)以XML封裝;
b、發(fā)送數(shù)據(jù)以ASCII字符0作為結(jié)束標(biāo)識;
c、推送程序的監(jiān)聽端口應(yīng)在 1024 以上;
其中a、b規(guī)定了推送與接受之間的數(shù)據(jù)傳輸格式,c為Flash的安全措施?!?BR> 3、數(shù)據(jù)接受程序的開發(fā)技術(shù)
開發(fā)web嵌入式數(shù)據(jù)接受技術(shù),主要有兩種方法: Flash Application(以后簡稱FA) 和 Java Applet。使用 Flash 中 Action Script 開發(fā)的應(yīng)用程序就是FA,與 Java Applet 相比,F(xiàn)A具有體積小(一般只有幾KB)、插件普及率高、對browse端的要求低等的特點?!?BR> 針對不同的操作系統(tǒng)和瀏覽器,F(xiàn)lash具有相應(yīng)的插件,保證了FA能跨平臺運行。Flash內(nèi)建的 XMLSocket 對象實現(xiàn)了browse端的socket,允許基于FA的browse端數(shù)據(jù)接受程序與server端的數(shù)據(jù)推送程序之間建立基于socket的持續(xù)連接,并通過該連接進行雙向的無限制的數(shù)據(jù)交換。
FA包含于 Flash 動畫, Flash 動畫通過或標(biāo)記嵌入網(wǎng)頁中,并隨網(wǎng)頁一起從server端下載到browse端的瀏覽器中。FA在browse瀏覽器中通過XMLSocket向server上的數(shù)據(jù)推送程序發(fā)出連接請求,建立起連接后,F(xiàn)A就能自動接收來自server的以XML格式封裝的數(shù)據(jù),并從中分析出所需的信息來刷新瀏覽器中的網(wǎng)頁?!?BR> 建立數(shù)據(jù)接收程序的基本步驟為:
a、創(chuàng)建XMLSocket對象;
b、設(shè)置XMLSocket對象的事件響應(yīng)函數(shù);
c、調(diào)用XMLSocket對象的connect方法,與server建立連接;
d、在XMLSocket對象的onXML事件響應(yīng)函數(shù)中解析數(shù)據(jù),更新瀏覽器中的網(wǎng)頁?!?BR> 4、asp/flash+vf+vf三層應(yīng)用實例
完整的例子太龐大,只說關(guān)鍵的東東了?!?BR> a、構(gòu)造XML的數(shù)據(jù)封裝格式
vf 7.0 以后就支持XML,可以直接把表中數(shù)據(jù)導(dǎo)出為XML。由于我們考慮的是粒度更新,所以不把表或游標(biāo)整個推送,簡單些就直接用文本合并等方法,定義形如“<標(biāo)記名>”的標(biāo)記,封裝推送的數(shù)據(jù)即可。例如:
<標(biāo)記名 屬性1="屬性1值" 屬性2="屬性2值"……/>
b、vf數(shù)據(jù)推送程序
vf 的版本必須至少是6.0 SP3 以上,這樣才支持com,建議使用8.0。
當(dāng)數(shù)據(jù)發(fā)生變化時,數(shù)據(jù)庫事件就會產(chǎn)生,這時可以把變化的數(shù)據(jù)進行XML封裝,并根據(jù)已經(jīng)登錄的用戶列表,推送數(shù)據(jù)到brower端?!?BR> c、基于Flash的web嵌入式數(shù)據(jù)接收處理程序
這里給出兩個關(guān)鍵的事件響應(yīng)函數(shù)(其它的就簡單了,省略):
// 連接函數(shù)
on(release)
{
// 創(chuàng)建 XMLSocket
listener = new XMLSocket();
// 設(shè)置事件響應(yīng)函數(shù)
listener.onXML = listenerOnXML;
// 連接數(shù)據(jù)推送程序
listener.connect(主機,端口);
}
// 推送數(shù)據(jù)到達brower時的onXML事件響應(yīng)函數(shù)
function listenerOnXML(src)
{
// 注意:名稱與值應(yīng)該對應(yīng)!
屬性1 = src.childNodes[0].attributes.屬性1
引入數(shù)據(jù)推送技術(shù),實現(xiàn)browse中的網(wǎng)頁自動粒狀更新
這種push技術(shù)就是由server端主動發(fā)送各種已經(jīng)更新的數(shù)據(jù)給browse,不必發(fā)送完整的網(wǎng)頁,browse端根據(jù)所接受到的數(shù)據(jù)對網(wǎng)頁進行局部的更新。
為此需要在server端編制vf的數(shù)據(jù)推送程序,在browse端的網(wǎng)頁嵌入數(shù)據(jù)接受程序。另外,如果考慮browse端的操作系統(tǒng)和瀏覽器具有的不確定性,也就是所謂的跨平臺應(yīng)用,數(shù)據(jù)就用XML封裝?!?BR> 1、推送數(shù)據(jù)的vf程序的流程
a、在特定的端口偵聽browse的連接請求(或者說檢測用戶是否請求登錄);
b、browse端請求建立連接(登錄);
c、建立browse連接列表(建立已經(jīng)登錄的用戶列表);
d、如browse斷開連接,則從連接列表中刪除該連接;
e、server端更新數(shù)據(jù)的采集、XML封裝;
f、server推送數(shù)據(jù)到所有的在線的(已經(jīng)連接的)browse端?!?BR> 2、數(shù)據(jù)推送程序的基本規(guī)則(基于 Flash 的 web 嵌入式數(shù)據(jù)接受程序)
a、發(fā)送數(shù)據(jù)以XML封裝;
b、發(fā)送數(shù)據(jù)以ASCII字符0作為結(jié)束標(biāo)識;
c、推送程序的監(jiān)聽端口應(yīng)在 1024 以上;
其中a、b規(guī)定了推送與接受之間的數(shù)據(jù)傳輸格式,c為Flash的安全措施?!?BR> 3、數(shù)據(jù)接受程序的開發(fā)技術(shù)
開發(fā)web嵌入式數(shù)據(jù)接受技術(shù),主要有兩種方法: Flash Application(以后簡稱FA) 和 Java Applet。使用 Flash 中 Action Script 開發(fā)的應(yīng)用程序就是FA,與 Java Applet 相比,F(xiàn)A具有體積小(一般只有幾KB)、插件普及率高、對browse端的要求低等的特點?!?BR> 針對不同的操作系統(tǒng)和瀏覽器,F(xiàn)lash具有相應(yīng)的插件,保證了FA能跨平臺運行。Flash內(nèi)建的 XMLSocket 對象實現(xiàn)了browse端的socket,允許基于FA的browse端數(shù)據(jù)接受程序與server端的數(shù)據(jù)推送程序之間建立基于socket的持續(xù)連接,并通過該連接進行雙向的無限制的數(shù)據(jù)交換。
FA包含于 Flash 動畫, Flash 動畫通過或標(biāo)記嵌入網(wǎng)頁中,并隨網(wǎng)頁一起從server端下載到browse端的瀏覽器中。FA在browse瀏覽器中通過XMLSocket向server上的數(shù)據(jù)推送程序發(fā)出連接請求,建立起連接后,F(xiàn)A就能自動接收來自server的以XML格式封裝的數(shù)據(jù),并從中分析出所需的信息來刷新瀏覽器中的網(wǎng)頁?!?BR> 建立數(shù)據(jù)接收程序的基本步驟為:
a、創(chuàng)建XMLSocket對象;
b、設(shè)置XMLSocket對象的事件響應(yīng)函數(shù);
c、調(diào)用XMLSocket對象的connect方法,與server建立連接;
d、在XMLSocket對象的onXML事件響應(yīng)函數(shù)中解析數(shù)據(jù),更新瀏覽器中的網(wǎng)頁?!?BR> 4、asp/flash+vf+vf三層應(yīng)用實例
完整的例子太龐大,只說關(guān)鍵的東東了?!?BR> a、構(gòu)造XML的數(shù)據(jù)封裝格式
vf 7.0 以后就支持XML,可以直接把表中數(shù)據(jù)導(dǎo)出為XML。由于我們考慮的是粒度更新,所以不把表或游標(biāo)整個推送,簡單些就直接用文本合并等方法,定義形如“<標(biāo)記名>”的標(biāo)記,封裝推送的數(shù)據(jù)即可。例如:
<標(biāo)記名 屬性1="屬性1值" 屬性2="屬性2值"……/>
b、vf數(shù)據(jù)推送程序
vf 的版本必須至少是6.0 SP3 以上,這樣才支持com,建議使用8.0。
當(dāng)數(shù)據(jù)發(fā)生變化時,數(shù)據(jù)庫事件就會產(chǎn)生,這時可以把變化的數(shù)據(jù)進行XML封裝,并根據(jù)已經(jīng)登錄的用戶列表,推送數(shù)據(jù)到brower端?!?BR> c、基于Flash的web嵌入式數(shù)據(jù)接收處理程序
這里給出兩個關(guān)鍵的事件響應(yīng)函數(shù)(其它的就簡單了,省略):
// 連接函數(shù)
on(release)
{
// 創(chuàng)建 XMLSocket
listener = new XMLSocket();
// 設(shè)置事件響應(yīng)函數(shù)
listener.onXML = listenerOnXML;
// 連接數(shù)據(jù)推送程序
listener.connect(主機,端口);
}
// 推送數(shù)據(jù)到達brower時的onXML事件響應(yīng)函數(shù)
function listenerOnXML(src)
{
// 注意:名稱與值應(yīng)該對應(yīng)!
屬性1 = src.childNodes[0].attributes.屬性1