1. 程式人生 > WINDOWS開發 >C#工作總結(一):Fleck的WebSocket使用

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網頁端程式碼

WebSocket測試

相關推薦

C#工作總結Fleck的WebSocket使用

https://blog.csdn.net/ZslLoveMiwa/article/details/80247739 .引子Foreword ? ? ? 最近公司裡面要做窗體和網頁互動的功能。網上找了一下資料,這裡做一個簡單的擴充和整理,部分內容可能是摘自其他部落格,這

c++ effective總結

條款c++為一個語言聯邦   c++可以認為是由C,Object-Oriented C++(面向物件),Template C++模板,STLc++標準模板庫四種次語言組成的。

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#版GDAL3VS2015+.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設計基於主題的釋出和訂閱模式,其核心功能包括訊息傳送、訊息儲存、訊息消費,整體設計追求簡單與效能第一,主要體現在三個方面