当前有一个需求,需要网页端调用扫描仪,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"); } else { 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) } } initWS(); function scan() { ws && ws.send('scan'); }

html代码

<button onclick="scan()">扫描</button>
  • initWS创建连接,支持断线重连
  • 可以调用scan函数,发送scan指令

使用websocket-sharp来创建c#版本的websocket服务相关推荐

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

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

  2. 【websocket前后端交互】vue-springboot实现websocket前后端交互链接,websocket心跳重连,包含前后端代码,复制即可用【详细解释版本】

    前言: 还是老规矩,一步步的教大家如何建立前后端的 websocket 链接,并能完成互相传送数据的简单功能.由于网上找了半天发现很多帖子都是东一句西一句的,要不就是写的没什么注释和解释,导致我这个前 ...

  3. git创建本地版本仓库及注意事项

    git怎么创建本地版本仓库 安装git我就不用说了吧!下载地址:https://github.com/msysgit/msysgit/releases/download/Git-1.9.4-previ ...

  4. Git初学札记(三)————创建Git版本库

    引言 版本库即所谓的Git仓库,英文名称是Repository,可以简单理解为一个目录(.git folder),这个目录可以记录并保存直接父级及其子目录下的全部文本文件的修改操作,谓之"版 ...

  5. git-版本的创建与版本的切换操作

    linux演练 git-版本的创建与版本的切换操作 - pyhui的python全栈技术博客 - CSDN博客 https://blog.csdn.net/ifubing/article/detail ...

  6. 安卓权威编程指南 挑战练习 20.9 创建多版本主题

    20.9 挑战练习:创建多版本主题 创建BeatBoxButton样式时,我们继承了 android:style/Widget.Holo.Button 中的一些属 性.虽然可行,但没有用上最新的系统主 ...

  7. SAP中复制创建生产版本时引申出工艺路线物料分配问题分析案例

    昨天,接到技术部门的同事反映,在针对某个物料创建生产版本时,出现如下图提示,无匹配任务清单存在. 根据提示,至少有两个重要线索: 1.用户采用复制方式创建生产版本:说明这两个物料是基于同一方式(同一生 ...

  8. php websocket udp,swoole创建websocket服务并且支持https服务,同时监听tcp,udp端口

    namespace serve\websocket; // use serve\websocket\task\Message as taskMessage; use serve\websocket\c ...

  9. websocket 连接本地端口_Web应用架构WebSocket 协议介绍

    由HyBi工作组开发的WebSocket有线协议(RFC 6455)由两个高级组件组成:用于协商连接参数的开放HTTP握手和二进制消息帧机制,以实现低开销.基于消息的文本和二进制数据传输. WebSo ...

最新文章

  1. ubuntu14.04.5装cuda7.5记录(解决unable to locate the kernel source,装cuda黑屏问题,装cuda循环登录问题)
  2. window下ffmpeg的编译
  3. 可能没有很好的重工业转型的case
  4. 面向对象程序设计-C++ Default constructor Copy constructor Destructor Operator Overloading【第九次上课笔记】...
  5. aptitude安装出现依赖_据说 pip install 今年将出现重大变化!
  6. 神龙神龙你擦亮眼,阿里巴巴要“上天”!
  7. 分享几套古典复古式的UI设计
  8. 当他不再爱你的时候(男女生一定要看)
  9. HDU 1546 Idiomatic Phrases Game
  10. url 转码 java_HttpClient请求URL字符集转码问题解决方法
  11. c语言中输入n一个整数存入一维数组,编写程序输入n个整数到一维数组(先输入数据的个数n,再输入n个数据),然后以输入的顺序输出这些数。...
  12. 蓝桥云算法题之火柴棒等式——Python满分解答
  13. 小玩意 - CSDN 插件(Chrome版)
  14. 区块链入华十年兴衰录
  15. 互联网风控系统架构分析
  16. ArcGIS坡度的提取
  17. DevOps系列之 —— 持续规划与设计(四)敏捷需求管理【用户故事 敏捷估算】
  18. java MongoDB直接存pojo类
  19. 股票价格走势的行业关联性
  20. 领证啦,立抵3600,软考证书到手后还有很多作用

热门文章

  1. 如何提高模型性能?这几个方法值得尝试 | CSDN 博文精选
  2. 伯克利AI研究院:强化学习是GPT2等自回归语言模型弥补不足的良方?
  3. Python中的*args和**kwargs是什么?该如何使用?
  4. SAP QM 检验批里样品数量的确定
  5. 武汉大学提出ARGAN:注意力循环生成对抗模型用于检测、去除图像阴影 | ICCV 2019
  6. 人工神经网络研究的发展及特性,以前不叫人工智能
  7. 郭瑞东 | 如何制造更聪明的人工智能?让人工生命在复杂环境中进化
  8. 《汽车驾驶自动化分级》国家标准发布
  9. 谷歌用量子计算机造出「时间晶体」,挑战热力学第二定律
  10. AI 技术与人类主体想象 ——基于人工直觉在线讨论的研究