日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > C# >内容正文

C#

【转】使用websocket-sharp来创建c#版本的websocket服务

發(fā)布時(shí)間:2023/12/10 C# 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【转】使用websocket-sharp来创建c#版本的websocket服务 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

當(dāng)前有一個(gè)需求,需要網(wǎng)頁(yè)端調(diào)用掃描儀,javascript不具備調(diào)用能力,因此需要在機(jī)器上提供一個(gè)ws服務(wù)給前端網(wǎng)頁(yè)調(diào)用掃描儀。而掃描儀有一個(gè)c#版本的API,因此需要尋找一個(gè)c#的websocket庫(kù)。

java里有大名鼎鼎的netty,通過搜索,c#可以選擇websocket-sharp來實(shí)現(xiàn)websocket Server。

使用websocket-sharp創(chuàng)建websocket server####

Copy

using System; using WebSocketSharp; using WebSocketSharp.Server; namespace Example { public class Laputa : WebSocketBehavior { protected override void OnMessage (MessageEventArgs e) { var msg = e.Data == "BALUS" ? "I've been balused already..." : "I'm not available now."; Send (msg); } } public class Program { public static void Main (string[] args) { var wssv = new WebSocketServer ("ws://dragonsnest.far"); wssv.AddWebSocketService<Laputa> ("/Laputa"); wssv.Start (); Console.ReadKey (true); wssv.Stop (); } } }

Step 1#

Required namespace.

Copy

using WebSocketSharp.Server;

The?WebSocketBehavior?and?WebSocketServer?兩個(gè)類需要引用?WebSocketSharp.Server?namespace.

Step 2#

編寫處理類,需要繼承?WebSocketBehavior?class.

例如,如果你要?jiǎng)?chuàng)建一個(gè)echo Service,

Copy

using System; using WebSocketSharp; using WebSocketSharp.Server; public class Echo : WebSocketBehavior { protected override void OnMessage (MessageEventArgs e) { Send (e.Data); } }

再提供一個(gè) chat service,

Copy

using System; using WebSocketSharp; using WebSocketSharp.Server; public class Chat : WebSocketBehavior { private string _suffix; public Chat () : this (null) { } public Chat (string suffix) { _suffix = suffix ?? String.Empty; } protected override void OnMessage (MessageEventArgs e) { Sessions.Broadcast (e.Data + _suffix); } }

可以通過繼承WebSocketBehavior類來自定義Service.

通過重載?WebSocketBehavior.OnMessage (MessageEventArgs)?方法, 來處理消息

同時(shí)你也可以重載?WebSocketBehavior.OnOpen (),?WebSocketBehavior.OnError (ErrorEventArgs), 和?WebSocketBehavior.OnClose (CloseEventArgs)?方法,來處理websocket連接事件。

通過WebSocketBehavior.Send?方法來給客戶端發(fā)送消息。

If you would like to get the sessions in the service, you should access the?WebSocketBehavior.Sessions?property (returns a?WebSocketSharp.Server.WebSocketSessionManager).

The?WebSocketBehavior.Sessions.Broadcast?method can send data to every client in the service.

Step 3#

創(chuàng)建?WebSocketServer?對(duì)象.

Copy

var wssv = new WebSocketServer (4649); wssv.AddWebSocketService<Echo> ("/Echo"); wssv.AddWebSocketService<Chat> ("/Chat"); wssv.AddWebSocketService<Chat> ("/ChatWithNyan", () => new Chat (" Nyan!"));

Step 4#

啟動(dòng) WebSocket server.

Copy

wssv.Start ();

Step 5#

停止 WebSocket server.

Copy

wssv.Stop (code, reason);

測(cè)試Demo#

目的:對(duì)外提供一個(gè)websocket服務(wù),讓網(wǎng)頁(yè)端的js可以調(diào)用掃描儀

服務(wù)端代碼#

Copy

class Program { static void Main(string[] args) { var wssv = new WebSocketServer(10086); wssv.AddWebSocketService<ScannerHandler>("/scan"); wssv.Start(); if (wssv.IsListening) { Console.WriteLine("Listening on port {0}, and providing WebSocket services:", wssv.Port); foreach (var path in wssv.WebSocketServices.Paths) Console.WriteLine("- {0}", path); } Console.WriteLine("\nPress Enter key to stop the server..."); Console.ReadLine(); wssv.Stop(); } } public class ScannerHandler : WebSocketBehavior { protected override void OnMessage(MessageEventArgs e) { if(e.Data == "scan") { ScanResult result = ScanerHelper.Scan("D:\\test.jpg"); if (result.Success) { Console.WriteLine("scan success"); Send("scan success"); } else { Send("scan eror"); } } } }

前端代碼#

javascript代碼

Copy

var ws; function initWS() { ws = new WebSocket("ws://127.0.0.1:10086/scan"); ws.onopen = function () { console.log("Openened connection to websocket"); }; ws.onclose = function () { console.log("Close connection to websocket"); // 斷線重連 initWS(); } ws.onmessage = function (e) { alert(e.data) } } initWS(); function scan() { ws && ws.send('scan'); }

html代碼

Copy

<button onclick="scan()">掃描</button>

  • initWS創(chuàng)建連接,支持?jǐn)嗑€重連
  • 可以調(diào)用scan函數(shù),發(fā)送scan指令

作者: JadePeng

出處:https://www.cnblogs.com/xiaoqi/p/websocket-sharp.html

版權(quán):本文采用「署名-非商業(yè)性使用-相同方式共享 4.0 國(guó)際(歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁(yè)面明顯位置給出原文鏈接)?」知識(shí)共享許可協(xié)議進(jìn)行許可。

總結(jié)

以上是生活随笔為你收集整理的【转】使用websocket-sharp来创建c#版本的websocket服务的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。