https://blog.csdn.net/ZslLoveMiwa/article/details/80247739
一.引子(Foreword)
最近公司里面要做窗體和網頁交互的功能。網上找了一下資料,這里做一個簡單的擴充和整理,部分內容可能是摘自其他博客,這里會注明出處和原文地址供大家和自己日后查閱。
二.基礎知識(Foundation)
(1). WebSocket介紹
WebSocket協議是基於TCP的一種新的網絡協議。它實現了瀏覽器與服務器全雙工(full-duplex)通信——允許服務器主動發送信息給客戶端。(來自白度百科)
(2).瀏覽器對WebSocket的支持
瀏覽器
支持情況
Chrome谷歌瀏覽器
Chrome version 4+支持
Firefox火狐瀏覽器
Firefox version 5+支持
IE微軟瀏覽器
IE version 10+支持(我們一般win7自帶的是IE11)
Safari蘋果瀏覽器
IOS 5+支持
Android Brower安卓瀏覽器
Android 4.5+支持
(3). WebSocket服務器支持
廠商
應用服務器
備注
IBM
WebSphere
WebSphere 8.0以上版本支持,7.X之前版本結合MQTT支持類似的HTTP長連接
甲骨文
WebLogic
WebLogic 12c 支持,11g以及10g版本通過HTTP Publish支持類似的HTTP長連接
微軟
IIS
IIS 7.0+支持
Apache
Tomcat
Tomcat 7.0.5+支持
Jetty
Jetty 7.0+支持
(4). Web前端知識概要
<1>. 對象創建(調用WebSocket的構造函數)
1)函數原型:
Constructor(DOMString url,[DOMString protocols]);
2)說明:url為WebSocket服務器的地址,protocols為發起握手的協議名稱,為可選擇項。
<2>. 接口及函數方法(WebSocket的接口的定義)
1)函數原型:
Interface WebSocket:EventTarget{
readonly attribute DOMString url;
//readyState狀態值
Const unsigned short CONNECTING=0;
Const unsigned short OPEN=1;
Const unsigned short CLOSING=2;
Const unsigned short CLOSED=3;
readonly attribute unsigned short readyState;
readonly attribute unsigned long bufferedAmount;
//監聽網絡狀態的事件監聽器屬性
[TreatNonCallableAsNull] attribute Function? onopen;
[TreatNonCallableAsNull] attribute Function? onerror;
[TreatNonCallableAsNull] attribute Function? onclose;
readonly attribute DOMString extensions;
readonly attribute DOMString protocol;
//關閉網絡連接的方法
void close([Clamp] optional unsigned short code,optional DOMString reason);
//接受服務器消息的事件監聽器函數
[TreatNonCallableAsNull] attribute Function? onmessage;
attribute DOMString binaryType;
void send(DOMString data);
void send(ArrayBuffer data);
void send(Blob data);
};
2)說明:
【1】. 兩個方法:
● send():向遠程服務器發送數據
● cosle():關閉該WebSocket
【2】. 四個重要的事件監聽器屬性:
● onopen:當WebSocket建立網絡連接的時候觸發該事件
● onerror:當網絡連接出現問題的時候觸發該事件
● onclose:當WebSocket被關閉的時候觸發該事件
● onmessage:當WebSocket接受到遠程服務器的數據的時候觸發該事件
注意:1. 上面的四個函數名均為小寫,大小寫時敏感的;
2. onmessage 綁定一個型為 function(event){…} 的函數這樣就可以通過event.data來獲得返回的數據;
【3】. readyState屬性,用於返回WebSocket所處的狀態:
● CONNECTING(數值0):WebSocket正在嘗試與服務器建立連接
● OPEN(數值1):WebSocket與服務器已經建立連接
● CLOSING(數值2):WebSocket正在關閉與服務器的連接
● CLOSED(數值3):WebSocket已經關閉了與服務器的連接
<3>. 使用WebSocket(4步)
1) 將相關的定義函數綁定到上面4個監聽事件中;
2) 調用WebSocket的構造函數,給定一個url來初始化一個WebSocket對象;
3) 通過send()方法來發送數據;
4) 在有必要的時候可以用close()來關閉監聽;
(4).客戶端知識概要
<1>. 梗概
我們可以通過基礎的Socket通信來實現和網頁的相互通信。但由於只有在.net Framework在4.5以及4.5以上的版本對WebSocket通信的數據解析才有相關的類來支持。所以解析數據寫起來十分的繁瑣,所以我們使用第三方的庫來完成低版本.net框架中的通信。如果有時間我也會寫一篇有關socket來進行通信及解析數據的文章。
接下來我看看用的軟件和相關的技術知識。
<2>. .Net不同WebSocket庫的比較
我這里找了一下網上的資料,如下鏈接,如果僅僅是要從網頁發送消息到服務器,那么我這邊使用Flerk。
● 英文版:WebSocket libraries comparison
● 翻譯版:.NET的WebSocket開發包比較【已翻譯100%】
<3>. Fleck的源碼下載以及說明文檔
源碼可以從網上下載,這里我給出鏈接:源碼下載
點擊頁面中的Clone or download -> Download ZIP,如下
圖一
說明文檔就在下載的下面,是英文版的的,當然也可以看我博客中的譯文:博主翻譯版說明文檔 (覺得不錯的話轉載一下喲:-》)
一.引子(Foreword)
對於怎么使用直接看說明文檔,非常簡單,這里博主就不多說了。(博主都寫到晚上1點了T T)
三.代碼(Code)
(1). Web網頁端代碼