C# winform websocket学习笔记(一)准备

1 前言

 由于某些原因需要多个客户端之间实时同步,由服务端主动推送,但是定时推送这种实在不太行,于是考虑了这类技术。由于主要是用.net开发,所以主要考虑这方面。

最开始是准备用的signalr,但被否决了,认为signalr兼容其他技术背的包袱太重,而且还要jQuery这种,需要轻装上阵。

由于signalr主要也是使用websocket技术,加上微软也有system.net.webscoket这么个命名空间,于是就决定用纯粹的这个来做,winform做服务端,客户端方面winform、web页面乃至APP端都能支持。

不过由于中文互联网上对于system.net.webscoket这个命名空间的资料也太少了,可能因为太简单大佬们都懒得动,导致我找资料非常的艰难。由于我本人水平很一般,没有详细资料代码的时候一头雾水,勉强拼凑出能运行的程序后看文档反而多了不少头绪。这里也分享一下我的websocket学习历程,帮助一下想研究一下这么个偏门东西但有实力有限不得不多走弯路的人吧。

2 websocket介绍

2.1 websocket技术

搬运一下别人的介绍吧:

WebSocket是HTML5提供的一种在单个 TCP 连接上进行全双工通讯的协议,目前chrome、Firefox、Opera、Safari等主流版本均支持,Internet Explorer从10开始支持。另外因为WebSocket 提供浏览器一个原生的 socket实现,所以直接解決了 Comet 架构很容易出错的问题,而在整個架构的复杂度上也比传统的实现简单得多。

WebSocket本质上是一个基于TCP的持久化协议,相对于HTTP这种非持久的协议来说,它能够更好的节省服务器资源和带宽,并且真正实现实时通信。其优点在前面我们已经做了对比,最大的缺点就是对旧版本浏览器不支持。至此SignalR的出现,完美的解决了种浏览器的问题,SignalR不仅可以实现WebSocket的所有功能,还对旧版本浏览器做了支持。SignalR可自动或手动选择使用WebSocket传输还是其他替代方式传输,以实现实时Web技术。

相当于在HTTP连接中弄了个TCP连接,看成web端的socket协议即可(然而半吊子的我没研究过socket,哭o(╥﹏╥)o)

2.2 c# websocket

给一个微软文档地址 https://docs.microsoft.com/zh-cn/dotnet/api/system.net.websockets?view=netframework-4.5

是websocket有关的一些类,非专业出身,干看这个我真的不知道怎么写代码,不过和代码对照使用却还挺有用处。

其实还有一个 https://docs.microsoft.com/zh-cn/dotnet/api/system.web.websockets?view=netframework-4.5.1

这是system.web.websocket,看名字估计是用在.net web程序中的吧,反正我没用到。

注意:如果你是用system.net.websocket编写客户端,那你客户端所运行的计算机,必须是win8及以上并且framework4.5及以上。如果是win7的,对不起,会报错。

https://blog.csdn.net/LongtengGensSupreme/article/details/84029552

我测试过,是这样的。

2.3 C# websocket开发包

所以其实有一些开发包提供了dll,可以很方便地使用C# websocket,而且不必顾及系统版本。见 https://www.oschina.net/translate/websocket-libraries-comparison-2

我其实大部分都试了,首先是signalr,其实挺不错,各平台都能使用,微软官方支持,可以看这本书《asp.net signalr 编程实战》,写的挺好。

然后是fleck,这个真的很赞,只需要很少代码就能实现功能,和web端代码一样简洁,可惜fleck只提供服务端编写,可以在github上搜,网上这个项目的使用教程非常多。

还有websocket-sharp,顾名思义,专门为c#设计的,也在github上有,介绍教程非常详细,客户端服务端都支持,不过网上资料相对较少,我用起来也有点点别扭。

如果不是实在需要用纯粹的websocket,看到这里可以走了,选fleck或者websocket-sharp乃至两者同时使用都行。

3 环境

我是win10,VS2013,项目framework4.5。除了不要是win7,其他倒没啥关系。

4 看过的博客等资料

在学习的过程中,参考了很多的资料,下面列出一些我收藏为书签的:

https://www.cnblogs.com/Code-life/p/6142926.html

https://blog.csdn.net/xieyu2205638/article/details/73160385

https://blog.csdn.net/zt102545/article/details/85139419

https://github.com/paulbatum/WebSocket-Samples

另外在谷歌上,Stack Overflow上也看了一些(外网这方面资料毕竟还是多一些啊)

 

下一篇开始进入正题

 

posted @ 2020-07-01 15:17  月光下的待宵草  阅读(5188)  评论(1编辑  收藏  举报