相关文章推荐
飘逸的饭卡  ·  《asyncio 系列》9. 使用基于 ...·  3 月前    · 
坚韧的显示器  ·  WebSocket - Web API | MDN·  3 月前    · 
年轻有为的山羊  ·  WebSocket API ...·  3 月前    · 
飞翔的感冒药  ·  Android ...·  3 月前    · 
玩命的馒头  ·  Step 1 TS 初探与游戏逻辑 - ...·  5 天前    · 
会开车的熊猫  ·  金华经济技术开发区部分公办学校(幼儿园)面向 ...·  1 年前    · 
帅气的葡萄  ·  济源发现一面新莽时期四神规矩纹铜镜 - 手机济源网·  1 年前    · 
温暖的凉面  ·  谈谈snprintf-腾讯云开发者社区-腾讯云·  1 年前    · 
体贴的充电器  ·  vsto vba ...·  2 年前    · 
Code  ›  使用websocket-sharp来创建c#版本的websocket服务开发者社区
websocket
https://cloud.tencent.com/developer/article/1057777
温柔的楼梯
2 年前
JadePeng
0 篇文章

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

前往专栏
腾讯云
开发者社区
文档 意见反馈 控制台
首页
学习
活动
专区
工具
TVP
最新优惠活动
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP 最新优惠活动
返回腾讯云官网
JadePeng
首页
学习
活动
专区
工具
TVP 最新优惠活动
返回腾讯云官网
社区首页 > 专栏 > JadePeng的技术博客 > 使用websocket-sharp来创建c#版本的websocket服务

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

作者头像
JadePeng
发布 于 2018-03-12 16:19:23
3.4K 0
发布 于 2018-03-12 16:19:23
举报

当前有一个需求,需要网页端调用扫描仪,javascript不具备调用能力,因此需要在机器上提供一个ws服务给前端网页调用扫描仪。而扫描仪有一个c#版本的API,因此需要寻找一个c#的websocket库。

java里有大名鼎鼎的netty,通过搜索,c#可以选择 websocket-sharp 来实现websocket Server。

使用websocket-sharp创建websocket server

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.

using WebSocketSharp.Server;

The WebSocketBehavior and WebSocketServer 两个类需要引用 WebSocketSharp.Server namespace.

Step 2

编写处理类,需要继承 WebSocketBehavior class.

例如,如果你要创建一个echo Service,

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

再提供一个 chat service,

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) 方法, 来处理消息

同时你也可以重载 WebSocketBehavior.OnOpen () , WebSocketBehavior.OnError (ErrorEventArgs) , 和 WebSocketBehavior.OnClose (CloseEventArgs) 方法,来处理websocket连接事件。

通过 WebSocketBehavior.Send 方法来给客户端发送消息。

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

创建 WebSocketServer 对象.

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

启动 WebSocket server.

wssv.Start ();
Step 5

停止 WebSocket server.

wssv.Stop (code, reason);

测试Demo

目的 :对外提供一个websocket服务,让网页端的js可以调用扫描仪

服务端代码
 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");
                    Send("scan eror");
    }
前端代码

javascript代码

    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)
 
推荐文章
飘逸的饭卡  ·  《asyncio 系列》9. 使用基于 asyncio 实现的异步框架构建 Web 应用程序 - 古明地盆
3 月前
坚韧的显示器  ·  WebSocket - Web API | MDN
3 月前
年轻有为的山羊  ·  WebSocket API (WebSockets) - Web API | MDN
3 月前
飞翔的感冒药  ·  Android WebView应用WebSocket本地/公网IP自动切换及JS合并咨询
3 月前
玩命的馒头  ·  Step 1 TS 初探与游戏逻辑 - Software Engineering Course Index
5 天前
会开车的熊猫  ·  金华经济技术开发区部分公办学校(幼儿园)面向2024年应届高校毕业生招聘拟聘人员公示(二)
1 年前
帅气的葡萄  ·  济源发现一面新莽时期四神规矩纹铜镜 - 手机济源网
1 年前
温暖的凉面  ·  谈谈snprintf-腾讯云开发者社区-腾讯云
1 年前
体贴的充电器  ·  vsto vba sheet拷贝会自动把名称管理器带过去sheet.copy()_workbooks("king.xls").sheets("king").copy before:=-CSDN博客
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号