亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

C# websocket及時通信協議的實現方法示例

2019-10-29 21:07:38
字體:
來源:轉載
供稿:網友

傳統“長輪詢”實現Web端即時通訊的問題

WebSocket出現之前,Web端為了實現即時通訊,所用的技術都是Ajax輪詢(polling)。輪詢是在特定的的時間間隔(如每1秒),由瀏覽器對服務器發出HTTP request,然后由服務器返回最新的數據給客服端的瀏覽器。這種傳統的HTTP request 的模式帶來很明顯的缺點 – 瀏覽器需要不斷的向服務器發出請求,然而HTTP request 的header是非常長的,里面包含的數據可能只是一個很小的值,這樣會占用很多的帶寬。

而比較新的技術去做輪詢的效果是Comet , 但這種技術雖然可達到全雙工通信,依然需要發出請求。

WebSocket 技術概覽

在 WebSocket API,瀏覽器和服務器只需要要做一個握手的動作,然后,瀏覽器和服務器之間就形成了一條快速通道。兩者之間就直接可以數據互相傳送,改變了原有的B/S模式。

WebSocket技術應用的典型架構:

#c67cbc1670aeb3fdd55d76e76c52be8c#

WebSocket的技術原理:

websocket通信協議,c#,websocket,示例,websocket編程

介紹了基礎知識,下面開始本文的正文內容:

C# websocket及時通信協議的實現

1:Websocket有java、nodejs、python、PHP、等版本 ,我現在使用的是C3版本,服務器端是Fleck??蛻舳撕头掌鞫藖硎褂脀ebsocket的,下面開始講解如何使用:

2:在開始之前我們先來看看哪些瀏覽器支持websocket:

websocket通信協議,c#,websocket,示例,websocket編程

Websocket服務器支持:

websocket通信協議,c#,websocket,示例,websocket編程

3:接下來我們使用的是C#控制臺程序來實現客戶端直接通信的實施推送第一步服務器端:

打開VS2015 創建項目Webshoufa(如下圖)

websocket通信協議,c#,websocket,示例,websocket編程

服務器端示例展示:

打開主程序入庫Program.CS

寫入主要鏈接推送代碼如下展示

FleckLog.Level = LogLevel.Debug; var allSockets = new List<IWebSocketConnection>(); var server = new WebSocketServer("ws://0.0.0.0:7181"); server.Start(socket => { socket.OnOpen = () => {  Console.WriteLine("Open!");  allSockets.Add(socket); }; socket.OnClose = () => {  Console.WriteLine("Close!");  allSockets.Remove(socket); }; socket.OnMessage = message => {  Console.WriteLine(message);  allSockets.ToList().ForEach(s => s.Send("Echo: " + message)); }; });

以上代碼:尤為重要的注意【Fleck】我們此次實例中服務端使用的是Fleck如下解釋:

Fleck是C#中的一個WebSocket服務器實現。從Nugget項目分支出來,Fleck不需要繼承,容器或其他引用。代碼示例如下(以下是一個將回顯給客戶端的例子。),在實現之前.NET平臺必須是在4.5之上才能運行,

上面開始已經提到。例子中定義引用WebSocketServer服務寫入端口路勁,格式方法是固定的。參照寫入即可。

實例代碼1如下

var server = new WebSocketServer("ws://localhost:7181");server.Start(socket => { socket.OnOpen = () => Console.WriteLine("Open!"); socket.OnClose = () => Console.WriteLine("Close!"); socket.OnMessage = message => socket.Send(message); });

實例代碼2如下(安全秘鑰版)

ar server = new WebSocketServer(“ wss://0.0.0.0:8431 ”);server.Certificate = new X509Certificate2(“ MyCert.pfx ”);server.Start(socket =>{ // ...用法正常 });

開始觸發server.Start業務輸出代碼,以上兩部分實例代碼輸出一樣的區別在于啟用安全連接需要兩件事情:使用該方案wss代替ws,并將Fleck指向包含公鑰和私鑰的x509證書。

細可以參考官網API:https://github.com/statianzo/Fleck

接下來寫入觸發鍵盤響應代碼:如下所示

var input = Console.ReadLine(); while (input != "exit") { foreach (var socket in allSockets.ToList()) {  socket.Send(input); } input = Console.ReadLine(); }

代碼解析:上述定義input =Console.ReadLine();由第一段輸出參數

在input不為空的情況下給予下一次事件發生。

在此完成服務器端示例開發。

客戶端頁面請求端展示(瀏覽器端)

1:新建客戶端項目,以web頁面或者webform頁面均可。

2:我的示例是以webform來創建如下圖展示:

websocket通信協議,c#,websocket,示例,websocket編程

在此,我們只實現數據實時交互展示,如需要數據存儲業務,需要在進行后臺編碼。

3:前段代碼展示:

websocket通信協議,c#,websocket,示例,websocket編程

JS詳解部分

<script type="text/javascript"> var start = function () { var inc = document.getElementById('incomming'); var wsImpl = window.WebSocket || window.MozWebSocket; var form = document.getElementById('sendForm'); var input = document.getElementById('sendText'); inc.innerHTML += "connecting to server ..<br/>"; // 創建新的websocket新連接端口為7181 window.ws = new wsImpl('ws://localhost:7181/'); // 當數據從服務器服務中心發送后,繼續向下運行過程 ws.onmessage = function (evt) { inc.innerHTML += evt.data + '<br/>'; }; // 當鏈接對象找到服務端成功對接后,提示正常打開 ws.onopen = function () { inc.innerHTML += '.. connection open<br/>'; }; // 當鏈接對象未找找到服務端成功對接后,提示打開失敗,別切單項關閉 ws.onclose = function () { inc.innerHTML += '.. connection closed<br/>'; } form.addEventListener('submit', function (e) { e.preventDefault(); var val = input.value; ws.send(val); input.value = ""; }); } window.onload = start;</script>

注意:以上示例代碼片段中window.ws = new wsImpl('ws://localhost:7181/');中ws關鍵定義。

啟用安全連接需要兩件事情:使用該方案wss代替ws,并將Fleck指向包含公鑰和私鑰的x509證書。

并使用window.onload = start;函數。

注意:

一.將腳本代碼放在網頁的底端,這樣在運行腳本代碼的時候,可以確保要操作的對象已經加載完成。

二.通過window.onload來執行腳本代碼。

第二段代碼:調用控件實體進行事件觸發:

<body> <form id="sendForm"> <input id="sendText" placeholder="Text to send" /> </form> <pre id="incomming"></pre></body>

以上是客戶端web頁面訪問進行實施數據推送的頁面開發完成。

好了,到了這里將兩個項目生成無誤之后逐個啟動不分順序,注意需要都啟動方可進行測試驗證:如下圖效果。

啟動客戶端頁面和控制臺程序(然后刷新下客戶端頁面即可)

在客戶端和服務器端交互時輸入:你好,高峰或者XXXX信息,幾乎在零誤差時間內服務器端收到數據。然后也可在服務器端窗口輸入信息,例如:你是不是要去阿拉善出差?

websocket通信協議,c#,websocket,示例,websocket編程

websocket通信協議,c#,websocket,示例,websocket編程

成功了,呵呵,是不是很神奇,現在可以添加自己喜歡的接口業務邏輯在里面了,是不是覺得前后臺通信變得簡單了?強不強大?爽不爽?。。?!

Ok,到此我們就結束了這里的教程,此次重點講述了以下兩點開發組套,大家在開發過程中尤為重視:

1:.NET 4.5 添加了WebSocket

2:服務端:

var listener = new HttpListener();listener.Prefixes.Add("http://*:8080/");listener.Start();var context = await listener.GetContextAsync();var wsContext = await context.AcceptWebSocketAsync(null);var ws = wsContext.WebSocket;

3:客戶端:

var ws = new ClientWebSocket();await ws.ConnectAsync(new Uri("ws://127.0.0.1:8080"),CancellationToken.None);

Ok,感謝大家看完小示例,有不足之處還請大家多多指教,共同探討,以下將實例代碼程序上傳進來供大家參考,完善。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持。   


注:相關教程知識閱讀請移步到c#教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲三级黄色在线观看| 成人黄色午夜影院| 一区二区三区视频免费| x99av成人免费| 亚洲伊人一本大道中文字幕| 亚洲精品成人久久| 亚洲国产精品国自产拍av秋霞| 伊人男人综合视频网| xxxx欧美18另类的高清| 最近2019年手机中文字幕| 一本久久综合亚洲鲁鲁| 亚洲成av人乱码色午夜| 国产成人在线播放| 8x拔播拔播x8国产精品| 91久久精品久久国产性色也91| 国产欧美精品xxxx另类| 国产999精品久久久影片官网| 91丝袜美腿美女视频网站| 深夜福利一区二区| 国语自产偷拍精品视频偷| 久久久亚洲国产天美传媒修理工| 狠狠躁夜夜躁久久躁别揉| 欧美激情videoshd| 日韩av大片免费看| 欧美激情视频在线免费观看 欧美视频免费一| 欧美精品一区三区| 久久精品国产96久久久香蕉| 色偷偷888欧美精品久久久| 日韩在线观看免费高清完整版| 中文字幕欧美在线| 青青草原成人在线视频| 国产精品99久久久久久白浆小说| 日韩视频永久免费观看| 人妖精品videosex性欧美| 韩国一区二区电影| 韩国v欧美v日本v亚洲| 国产精品香蕉av| 成人乱人伦精品视频在线观看| 国产精品爱啪在线线免费观看| 日本三级久久久| 97精品欧美一区二区三区| 国产成人精品在线观看| 97国产真实伦对白精彩视频8| 91在线色戒在线| 亚洲国产成人久久综合一区| 国产精品视频导航| 欧美激情第一页xxx| 久久久人成影片一区二区三区| 欧美成人免费全部| 久久精品久久精品亚洲人| 国产精品久久久久久久久粉嫩av| 欧美伦理91i| 成人国产精品一区二区| 日韩免费视频在线观看| 91精品国产91久久久| 日韩欧美在线视频免费观看| 亚洲国产精品资源| 国产91ⅴ在线精品免费观看| 欧美日本亚洲视频| 色婷婷av一区二区三区久久| 国产自产女人91一区在线观看| 欧美性受xxxx白人性爽| 91av在线视频观看| 日韩av男人的天堂| 欧美激情欧美激情| 91av中文字幕| 国产精品久久电影观看| 亚洲自拍另类欧美丝袜| 这里精品视频免费| 97在线视频精品| 欧美日韩在线观看视频小说| 欧美亚洲另类视频| 伊人一区二区三区久久精品| 亚洲激情久久久| 国产欧美日韩精品在线观看| 久久久欧美一区二区| 国产精品美女网站| 在线电影中文日韩| 国产精品国产三级国产aⅴ浪潮| 亚洲精品在线不卡| 亚洲人成伊人成综合网久久久| 国产精品盗摄久久久| 欧美一级在线播放| 亚洲永久在线观看| 国内精品久久久久久影视8| 青青青国产精品一区二区| 国产成人精品免费久久久久| 亚洲精品永久免费精品| 亚洲另类xxxx| 欧美成人午夜激情在线| www.美女亚洲精品| 国产精品美女视频网站| 国产日本欧美一区二区三区| 国产精品成人免费电影| 91av视频在线| 久久国产精品久久国产精品| 国内精品视频久久| 久久久久久久久91| 伊人青青综合网站| 国产精品网站大全| 久久成人18免费网站| 国产一区二区三区视频在线观看| 日韩av男人的天堂| 性视频1819p久久| 久久香蕉国产线看观看网| 欧美国产精品日韩| 91成人在线观看国产| 欧美电影在线播放| 亚洲精品久久久久| 欧美午夜精品伦理| 国产日韩精品一区二区| 97国产精品免费视频| 色婷婷亚洲mv天堂mv在影片| www.美女亚洲精品| 国产精品免费视频久久久| 午夜精品一区二区三区视频免费看| 中文字幕在线视频日韩| 亚洲人成网站在线播| 成人免费观看49www在线观看| 激情亚洲一区二区三区四区| 久久视频中文字幕| 亚洲国产高清福利视频| 91精品视频一区| 精品国产拍在线观看| 亚洲图片在线综合| 91久热免费在线视频| 亚洲精品久久7777777| 国产精品人成电影| 日韩欧中文字幕| 国产成人亚洲综合青青| 国产成人综合精品在线| www.色综合| 91欧美精品成人综合在线观看| 日本一本a高清免费不卡| 欧美性猛交xxxx久久久| 亚洲自拍偷拍网址| 国产亚洲欧洲黄色| 91久久精品国产91久久性色| 2019亚洲日韩新视频| 少妇精69xxtheporn| 日韩欧美大尺度| 欧美日韩激情视频8区| 久久久成人的性感天堂| 成人乱人伦精品视频在线观看| 午夜精品久久久99热福利| 欧美一级高清免费| 国产精品专区第二| 在线亚洲男人天堂| 午夜精品在线视频| xx视频.9999.com| 欧美成人精品xxx| 欧洲成人性视频| 91免费的视频在线播放| 51视频国产精品一区二区| 久久国产精彩视频| 91视频免费在线| 欧美激情女人20p| 在线观看成人黄色| 日产精品99久久久久久| 久久亚洲国产精品成人av秋霞| 亚洲男人第一av网站| 欧美精品午夜视频| 久久99精品久久久久久噜噜| 国产91精品最新在线播放|