C#基于websocket-sharp实现简易httpserver(封装)
一、背景
其实就是很简单的,公司会桌面开发的人员紧缺啊,项目又赶,而我们公司的前端人员人多还厉害(ps:吐槽下,后端的人真的少啊,会桌面开发的更少啊),所以萌生出了使用html+js来构建本地应用程序,但是我们的客户基本都是制造行业,需要对很多硬件进行交互(IO卡、PLC、串口等等各种),那就势必还是需要传统的应用程序(毕竟方案多),emmm,那这两者之间需要怎么样结合呢?so就有了本文,让winform变成一个httpserver,这样就可以接入各种硬件以及处理耗时动作,将界面跟业务处理分开,当时这个还是前端人员提出能不能用前端技术构建界面,后面我们一合计,应该是可以试试(ps:大佬们如果有问题请轻拍啊)
二、技术点说明
websocket-sharp
websocket-sharp是开源的websocket的C#封装,可以帮助我们快速构建websocket的相关应用,但是同时它也提供了httpserver的功能,这次选型这个的缘故也是因为有websocket的存在,后续扩展做实时的数据交互应该是非常方便的
其他:
autofac(IOC使用)、json.net(json序列化使用)
三、关注点
如图所示,对于一个自动更新程序,关注点应该都是以上几个点
- 支持Get以及Post请求,这个应该是基本的(对于其他请求没有进行封装)
- 依赖注入,还是很好用的,最直观的就是不用写new对象了
- 异常filter,可以实现全局异常捕获以及处理(服务端开发应该用的比较多)
- 文件获取,最直观的就是要显示图片咋办
- 自定义filter,就是平常我们针对于每个action的拦截器(目前还未实现)
大致应该就以上几点,如果实现以上几点,应该可以算是一个像模像样的简陋版httpserver(只支持api访问的那种)
四、设计流程图
一些说明:
1、为了减少依赖,我将websocket-sharp的源码全部放入到MHttpServer项目中,感谢websocket-sharp的作者,可以让我方便的实现httpserver的功能
2、整体流程就如上所示,应该还是比较顺畅,我目前是把自己做服务器端开发时候的一些惯性思路带到这个项目中,有可能会不符合其他人的开发习惯
3、其他具体看github的代码,如果有人想做研究的话
4、程序考虑支持XP,所以将.net framework的版本定在4.0,所以autofac的版本是比较低的,这个如果需要最新版本可以自己去升级
5、整体的开发参照目前WebApi的方式进行,路由规则定为controller/action(例如:User/Add),所以是没有参照restful的标准(实际原因是理解不了Restful怎么应付复杂的http请求场景,例如参数个数类型一样的情况下??)
五、如何使用
新建winform项目后,在需要开启的地方里加入以下代码:
MHttpServer.Listen listen = new MHttpServer.Listen(8088);ContainerBuilder builder = new ContainerBuilder();builder.RegisterType<TestService>().PropertiesAutowired();listen.InitController(builder);listen.start();
以上代码是实例化一个httpserver对象,并且将service注入到buid中,将build传入到InitController,通过这种方式实现全局的依赖注入
效果如下:
正常执行,并且触发更新winform的界面,TestDo方法是一个事件,事件中将收到的数据显示在form的richtextbox中
故意触发异常执行:
触发异常执行的时候,如下图所示,进入了ExceptionFilter中,并且将处理过的异常返回到前端
六、总结
这次的实践只是一个新的尝试,如果效果比较好的话,后续对于交互要求比较高的程序,应该都会采用这种方案进行,通过NanUI或者electron构建界面,本地开启httpserver进行硬件的交互以及业务上的数据查询,充分发挥团队中每个人的作用
这个项目中的大部分东西都是第三方开源产品,我只是做了一个封装,所以最后感谢开源这些产品的作者们
由于个人原因,在测试上可能会有所不够,如果有什么bug的话,还请告知,感谢(ps:文字表达弱鸡,多多包涵)
项目地址:https://github.com/Hello-Mango/MHttpServer
作者: Mango
出处: http://www.cnblogs.com/OMango/
关于自己:专注.Net桌面开发以及Web后台开发,开始接触微服务、docker等互联网相关(最近被互联网架构搞的死去活来- -)
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,如有问题, 可站内信告知.
转载于:https://www.cnblogs.com/OMango/p/9637970.html
C#基于websocket-sharp实现简易httpserver(封装)相关推荐
- 基于WebSocket实现一个简易的群聊功能
本文主要来讲解如何使用WebSocket来实现一个简易的群聊功能 引入maven依赖 <dependency><groupId>org.springframework.boot ...
- vue基于websocket实现智能聊天及吸附动画效果
目录 前言: 1.效果如下: 2.主要功能: 2.1.基于websocket实现聊天功能,封装了一个socket.js文件 2.2使用Jwchat插件实现类似QQ.微信电脑端的功能(其实并不是很好用, ...
- netty 基于 protobuf 协议 实现 websocket 版本的简易客服系统
https://segmentfault.com/a/1190000017464313 netty 基于 protobuf 协议 实现 websocket 版本的简易客服系统 结构 netty 作为服 ...
- 基于 WebSocket、Spring Boot 教你实现“QQ聊天功能”的底层简易demo
目录 前言 一.分析 1.1.qq聊天功能分析 1.2.WebSocket介绍 1.2.1.什么是消息推送呢? 1.2.2.原理解析 1.2.3.报文格式 二.简易demo 2.1.后端实现 2.1. ...
- 基于WebSocket协议实现Broker
写在前面: 前两篇文字<<基于MQTT协议谈谈物联网开发-华佗写代码>>,<<基于MQTT协议实现Broker-华佗写代码>>主要叙述了MQTT协议的编 ...
- websocket 发送图片_基于WebSocket的web端IM即时通讯应用的开发
基于WebSocket的web端IM即时通讯应用的开发 功能列表: 1.Web端的IM即时通讯应用 2.支持上线.下线.实时在线提醒 3.单聊.群聊的建立 4.普通文字.表情.图片的传输(子定义富文本 ...
- 基于Netty的RPC简易实现
代码地址如下: http://www.demodashi.com/demo/13448.html 可以给你提供思路 也可以让你学到Netty相关的知识 当然,这只是一种实现方式 需求 看下图,其实这个 ...
- 集成基于Websocket的Stomp连接
本篇文章主要就是记录一下前后端如何集成STOMP连接 后端是通过java+springboot+Stomp 前端是sockJS+Stomp 最原始的需求是在cocos里面使用长连接进行消息通信,毕竟游 ...
- SpringBoot + Vue 实现基于 WebSocket 的聊天室(单聊)
前言 在前一篇文章SpringBoot 集成 STOMP 实现一对一聊天的两种方法中简单介绍了如何利用 STOMP 实现单聊,本文则将以一个比较完整的示例展示实际应用,不过本文并未使用 STOMP,而 ...
最新文章
- uniapp中easycom组件的封装
- java017.Set集合
- 内卷时代的晋升述职要“想明白”和“讲清楚”
- class.forname().newInstance()
- python定义字符串数组_python数组声明
- 无论如何都是为了测试傻瓜搜索引擎
- html基础开发-jQuery框架基础语法攻略(攻略一)
- python画3d图-Python绘制3D图形
- python yield,到这个层次,才能叫深入哈
- 软件著作权算法软件设计说明书_软件著作权设计说明书模板.docx
- psp2000 M33 自制固件---恢复模式说明(基本所有版本都适用)
- K650c + Ubuntu 15.04无法正常关机,重启
- 傅里叶分解、叠加《matplotlib学习》
- 对于程序员来说什么才是A站B站。。。Z站?
- 3DMAX文件导入到OSG中。
- Windows 桌面主题 1.2
- GreenPlum常用字符串函数
- windows update服务不能正常开启
- 后真相时代(post-truth)出现的原因及影响
- 六种车牌检测识别算法GitHub项目调研对比