C#工作總結(一):Fleck的WebSocket使用
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網頁端程式碼
相關推薦
C#工作總結(一):Fleck的WebSocket使用
https://blog.csdn.net/ZslLoveMiwa/article/details/80247739 一.引子(Foreword) ? ? ? 最近公司裡面要做窗體和網頁互動的功能。網上找了一下資料,這裡做一個簡單的擴充和整理,部分內容可能是摘自其他部落格,這
c++ effective總結(一)
條款一:視c++為一個語言聯邦 c++可以認為是由C,Object-Oriented C++(面向物件),Template C++(模板),STL(c++標準模板庫)四種次語言組成的。
Linux-C程式設計總結(一)
技術標籤:c語言補碼字串指標 學習內容 C語言特點(目標:C語言開發方向?(Python C)) C語言資料型別(目標:取值範圍、型別定義、關鍵字、變數儲存空間) C語言基本控制語句(目標:使用基本控制語句) C語言
C#類(一):類和物件(EduCoder實訓題目)
第1關:類的組成 using System; using System.Collections.Generic; using System.Linq; using System.Text;
C# .Net面試題庫總結(一)
1、簡述 private、 protected、 public、 internal 修飾符的訪問許可權。 private : 私有成員, 在類的內部才可以訪問。
C#中的深度學習(一):使用OpenCV識別硬幣
在本系列文章中,我們將使用深度神經網路(DNN)來執行硬幣識別。具體來說,我們將訓練一個DNN識別影象中的硬幣。
ROS c++內嵌c語言(一):c標頭檔案處理
技術標籤:rosC++c++編譯器ros 背景: ROS開發過程中涉及到.cpp檔案呼叫.c檔案的函式,編譯時報警.c中被呼叫的函式未定義: main_window.cpp:(.text+0x36dc):對‘jt_to_CartesianPose(float*,float*)’未定義的
C#開啟WiFi熱點,WiFi共享的四種方式總結(一)
拚忘的部落格園要開始寫隨筆了,第一期就先講講wifi熱點吧..... 持續更新C#、wpf、.NetCore相關內容,歡迎關注!!
【C#】GDAL3編譯(一):Windows下超詳細編譯C#版GDAL3(VS2015+.NET 4+32位/64位)
轉載請註明原文地址:https://www.cnblogs.com/litou/p/15004877.html 目錄 一、介紹 二、編譯準備
熬夜整理的c/c++萬字總結(一),值得收藏!
一. C語言概述 歡迎大家來到c語言的世界,c語言是一種強大的專業化的程式語言。
個人記錄:對於python學習的反思和總結(一)
在寫程式碼時,總是遇到寫著寫著不知道怎麼寫了的情況,或者無法把自己的想法用程式表達出來,所以有時候我們需要建立一個自己的程式設計思路,對一個具體程式的程式設計有一個比較清晰的想法;因此我把自己的思
C#可擴充套件程式設計之MEF學習筆記(一):MEF簡介及簡單的Demo
在文章開始之前,首先簡單介紹一下什麼是MEF,MEF,全稱Managed Extensibility Framework(託管可擴充套件框架)。單從名字我們不難發現:MEF是專門致力於解決擴充套件性問題的框架,MSDN中對MEF有這樣一段說明:
通過UE4原始碼學C++語法(一):類靜態成員函式和類靜態成員變數
在為專案配置好Steam為OnlineSubsystem後,需要獲取OnlineSubsystem使用的語句如下:
API介面開發(一):介面開發返回結果解決方案
摘要 採用前後端分離的方式進行專案開發,那麼前後端互動比較好的方式是採用HTTP+JSON。如何介面返回結果更加簡潔,更加優雅,也更加合理,並且讓前端開發人員看得明白,後端開發者也並不會因此而增加工作量呢?
IO Monad 設計淺析(一):Monad 和 MonadError
ZIO 是最近 Scala 社群非常熱門且與眾不同的 IO Monad 實現,本專題我們會從各個角度分析 ZIO 和 Cats-Effect 等 IO Monad 的設計。
Spring Boot(一):快速開始
本系列文章旨在使用最小依賴、最簡單配置,幫助初學者快速掌握Spring Boot各元件使用,達到快速入門的目的。全部文章所使用示例程式碼均同步Github倉庫和Gitee倉庫。
Java 雜記(一):Java Core
基本型別 Boxing Java 支援自動裝箱,但是用過 C# 的人就會明白它和程式設計師真正理想的還差很遠(做到了無裝箱類),它只會在賦值時呼叫valueOf。比如說,我們有一個IntStream,而我們想轉成一個int[],此時呼叫to
Python使用指南(一):在微信頭像上新增紅旗貼畫
指南宣告 《Python使用指南》系列文章基於我的Python學習過程總結而成,主要內容是對各個實際需求從需求分析到使用Python進行實現的全幅記錄。由於技術和語文水平有限,該指南可能存在各種技術或表達問題,歡迎你留言
從零寫一個編譯器(一):輸入系統和詞法分析
前言 從半抄半改的完成一個把C語言編譯到Java位元組碼到現在也有些時間,一直想寫一個系列來回顧整理一下寫一個編譯器的過程,也算是學習筆記吧。就從今天開始動筆吧。
RocketMQ深度解析(一):RocketMQ總體設計
設計理念 RocketMQ設計基於主題的釋出和訂閱模式,其核心功能包括訊息傳送、訊息儲存、訊息消費,整體設計追求簡單與效能第一,主要體現在三個方面: