昨日學(xué)習(xí)了websocket的原生實(shí)例,覺(jué)得有必要把幾種常見的客戶端-服務(wù)器端無(wú)刷新交互形式列舉比較:
一、Ajax:客戶端決定何時(shí)主動(dòng)向Server端發(fā)請(qǐng)求
如:無(wú)刷新評(píng)論、無(wú)刷新更換圖片。
主要目的是為了無(wú)刷新客戶體驗(yàn),但都是客戶端的操作來(lái)觸發(fā)向Server發(fā)送請(qǐng)求。
實(shí)例網(wǎng)上很多,原生的js或封裝了的jQurey都算比較常用、易懂、易自助修改的方式。
二、Server-sent event:定時(shí)由Server端向客戶端推送內(nèi)容
如:每秒推送股市動(dòng)態(tài)、每秒推送體育比賽文字轉(zhuǎn)播。
特點(diǎn)是客戶端只需要發(fā)送一次“來(lái)吧,請(qǐng)蹂躪我吧”的請(qǐng)求(可打開頁(yè)面就自動(dòng)發(fā)送,減少用戶操作),Server就定時(shí)推送。缺點(diǎn)是耗流量。
原生實(shí)例可參照vevb:服務(wù)器發(fā)送事件(http://www.survivalescaperooms.com.cn/html5/html_5_serversentevents.asp)
三、Socket網(wǎng)絡(luò)通信:雙方平等,自由交互,我想發(fā)給你時(shí)你才需要接收
如:聊天場(chǎng)景。
特點(diǎn)是省流量,客戶端什么時(shí)候想發(fā)就發(fā),服務(wù)器端什么時(shí)候想回就回,兩邊都有監(jiān)聽者socket在負(fù)責(zé)。
我最初學(xué)習(xí)的是.Net Socket,是基于.net框架的網(wǎng)絡(luò)通信,一般實(shí)例用的控制臺(tái)程序或WinForm來(lái)做。
昨日新接觸了WebSocket,與Net Socket主要區(qū)別是面向?yàn)g覽器端(用web所以叫websocket),需要HTML5支持,瀏覽器大都支持(ie10以上,最新FF、Chrome都支持,聽說(shuō)Safari曾覺(jué)得此技術(shù)不安全暫時(shí)取消了支持),最可惜是需要.net4.5及以上版本才可以,即:.net4.0下是沒(méi)有System.Web.WebSocket這個(gè)命名空間(不知道另導(dǎo)dll有沒(méi)有用)——然而WinServer2003最多支持到.net4.0……
.net4.0下又想用web的形式、又想用socket:NetSocket做成控制臺(tái)程序,ui繼續(xù)用web(html+js)發(fā)送ws協(xié)議的請(qǐng)求到控制臺(tái)程序即可。
原生實(shí)例參考:Leo的(http://www.survivalescaperooms.com/Leo_wl/archive/2013/04/12/3016063.html),文章提及了上述的形式,僅有一處筆誤:GetSecKeyAccept()方法中附加的字符串少了一個(gè)“-”(在E914之前)。應(yīng)該是:byte[] encryptionString = SHA1.Create().ComputeHash(Encoding.ASCII.GetBytes(key + "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"));
筆者也寫了一份實(shí)例demo,支持多開web對(duì)同一server進(jìn)行通信,請(qǐng)看筆者“在線捉鬼”系列的svn代碼:
svn地址:https://115.29.246.25/svn/CatGhost/ 賬號(hào):guest 密碼:guest
第12版本日志:
1. 模擬服務(wù)器端:?jiǎn)?dòng)NetSocketDemo.Server項(xiàng)目
2. 模擬客戶端:訪問(wèn)Catghost.WebSocketDemo項(xiàng)目的Demo40.html頁(yè)面(可多開)
四、其他關(guān)鍵詞:SignalR(服務(wù)器推送),輪詢,Socket4Net(客戶端封裝),SuperSocket(服務(wù)器端封裝)
在學(xué)習(xí)的過(guò)程中遇到較多的其他關(guān)鍵詞,列出以備讀者拓展學(xué)習(xí)。
SignalR還沒(méi)學(xué)過(guò),輪詢是概念理解。
Socket4Net是對(duì)Socket的客戶端封裝:http://websocket4net.codeplex.com
SuperSocket是對(duì)Socket的服務(wù)器端封裝:http://superwebsocket.codeplex.com
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注