一、什么是Websocket?

1.WebSocket是HTML5下一种新的协议(websocket协议本质上是一个基于tcp的协议)
2.它实现了浏览器与服务器全双工通信,能更好的节省服务器资源和带宽并达到实时通讯的目的
3.Websocket是一个持久化的协议

二、Websocket、Socket、Http、Mqtt之间的区别?

Socket:
Socket是对tcp/ip协议族的封装的接口,Socket连接可以指定不同的传输层协议,即TCP或UDP,由于它是基于tcp/ip的,所以一般用在局域网内通信。

WebSocket:
WebSocket协议是基于TCP的一种新的网络协议,和http协议一样属于应用层协议,是一种让客户端和服务器之间能进行双向实时通信(全双工)的技术,且支持长连接,可以进行互联网间通信。引入ws和wss分别代表明文和密文的websocket协议,且默认端口使用80或443,几乎与http一致,WebSocket也要有一个握手过程,然后才能正式收发数据,由于数据包头部协议较小,不同于http每次请求需要携带完整的头部,所以网络开销比较少,长连接也让延迟明显更少(不需要重复新建连接)。

MQTT:
MQTT协议是为大量计算能力有限,且工作在低带宽、不可靠的网络的远程传感器和控制设备通讯而设计的协议,它具有以下主要的几项特性:
1.使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合;
2.对负载内容屏蔽的消息传输;
3.使用 TCP/IP 提供网络连接;

HTTP:
HTTP是一个属于应用层的,基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。
通信方式:
1.浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送请求。Web服务器根据接收到的请求后,向客户端发送响应信息。
2.HTTP之请求消息Request:请求行(request line)、请求头部(header)、空行和请求数据四个部分组成。
3.HTTP之响应消息Response:HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。
若connection 模式为close,则服务器会主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;若connection 模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求;

三、WS和WSS协议
        WS协议和WSS协议两个均是WebSocket协议的SCHEM,两者一个是非安全的一个是安全的。也是统一的资源标志符。就好比HTTP协议和HTTPS协议的差别。非安全的没有证书,安全的需要SSL证书。(SSL是Netscape所研发,用来保障网络中数据传输的安全性,主要是运用数据加密的技术,能够避免数据在传输过程被不被窃取或者监听。)其中WSS表示在TLS之上的WebSocket。WS一般默认是80端口,而WSS默认是443端口,大多数网站用的就是80和433端口。(在高防防护过程中,80和433端口的网站是需要备案才可以接入国内的。)当然网站也会有别的端口,这种如果做高防是方案是可以用海外高防的。WS和WSS的体现形式分别是TCP+WS AS WS ,TCP+TLS+WS AS WS。服务器网址就是 URL。最后墨者安全再说下WebSocket协议的特点:建立在 TCP 协议之上,服务端实现容易;与 HTTP 协议有良好的兼容性,握手时不容易被屏蔽,可以通过各种 HTTP 代理服务器;数据轻量,实时通讯;可以发送文本和二进制数据。不限制同源,客户端可以与任意服务器端进行通讯。因此WebSocket协议的出现,为很多人解决了关于扩展以及兼容性协议的烦恼问题。

WSS连接:由于wss是基于SSL,所以需要进行双向验证,客户端连接服务端时,我需要添加证书(服务端不验证可以不添加),服务端进行验证。注意:客户也需要对服务端进行验证,所以需要添加服务端证书回调,进行验证,这是很多人忽视,所以出现无法连接远程服务器,TLS/SSL验证失败的提示。

     public MainWindow(){InitializeComponent();RemoteCertificateValidationCallback remote = ValidateServerCertificate;ServicePointManager.ServerCertificateValidationCallback = remote;}/// <summary>/// 服务端验证/// </summary>/// <param name="sender"></param>/// <param name="certificate"></param>/// <param name="chain"></param>/// <param name="sslPolicyErrors"></param>/// <returns></returns>public bool ValidateServerCertificate( object sender,X509Certificate certificate,X509Chain chain,SslPolicyErrors sslPolicyErrors){return   true ;}     /// <summary>/// WebSocket客户端连接/// </summary>/// <param name="param"></param>/// <returns></returns>public async Task Connect(){CancellationTokenSource t = new CancellationTokenSource();try{client.Options.SetRequestHeader("key", "value");X509Certificate2 cert = new X509Certificate2("xxx.cert");client.Options.ClientCertificates.Add(cert);Uri uri = new Uri("wss://xxxxxx");//var config=new ServerConfigawait client.ConnectAsync(uri, t.Token);Thread.Sleep(300);Console.WriteLine($"链接websocket:[{uri}] 完成");Task s1 = new Task(Receive, t, t.Token, TaskCreationOptions.LongRunning);s1.Start();token = t;Console.WriteLine("Send Hello");}catch (Exception ex){Console.WriteLine($"链接websocket:[{uri}] 失败", ex.Message);}}/// <summary>/// Websocket接收/// </summary>/// <param name="obj"></param>private void Receive(object obj){CancellationTokenSource ts = obj as CancellationTokenSource;byte[] bs = new byte[1024];while (!ts.Token.IsCancellationRequested){try{ArraySegment<byte> buff = new ArraySegment<byte>(bs, 0, bs.Length);Task<WebSocketReceiveResult> res = client.ReceiveAsync(buff, ts.Token);res.Wait();if (ts.Token.IsCancellationRequested){return;}if (WebSocketCloseStatus.NormalClosure == res.Result.CloseStatus){Console.WriteLine($"websocket:与服务器断开链接:{res.Result.CloseStatus} --> Desc :{res.Result.CloseStatusDescription}");ts.Cancel();return;}string strData = encod.GetString(bs, 0, res.Result.Count);Console.WriteLine(strData);WsMsg msg = WsMsg.Deserialize(strData);}catch (Exception ex){Console.WriteLine("解析或执行 websocket:命令失败", ex);}}}

Websocket客户端与服务端通信代码参考:

WebSocket协议:5分钟从入门到精通 - 程序猿小卡 - 博客园

C# WebSocket_熊思雨的博客-CSDN博客_c# websocket

C# WebSocket - 南国叶子 - 博客园

C# Websocket连接(wss)相关推荐

  1. WebSocket连接wss链接

    参考链接:http://www.juliankrone.com/connect-and-transfer-data-with-secure-websockets-in-android/ WebSock ...

  2. php reactphp wss_swoole 使用websocket建立wss连接

    wss协议实际是websocket+SSL,就是在websocket协议上加入SSL层,类似https(http+SSL).  ws一般默认是80端口,而wss默认是443端口,大多数网站用的就是80 ...

  3. Websocket实现wss协议连接支持语音聊天功能

    部署单页应用 SPA 时,我们通常使用 Nginx 做中间层进行转发代理.为了保护 Web 安全,要求我们使用 HTTPS(HTTP + SSL) 以及 WSS(Websocket + SSL) 进行 ...

  4. Android 代理 wss,打android包使用wss协议进行websocket连接出错

    Creator version?(版本号) cocos creator v2.01 Affected platform?(受影响的平台) Android How to reproduce?(如何重现) ...

  5. websocket 连接本地端口_聊聊 WebSocket,还有 HTTP

    还记得曾经风靡一时的 QQ 秀聊天室吗?那时,还在上初.高中的我们,QQ 是最常用的聊天交友工具:而 QQ 秀聊天室的出现打破了只能按条件查找好友的局限性,大家可以随意进入聊天室房间,进行在线聊天.怀 ...

  6. 微信小程序websocket连接服务器(接收信息)

    app.js App({onLaunch: function () {var that = this;// 登录wx.login({success: res => {// 发送 res.code ...

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

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

  8. 支付宝小程序使用MQTT over WebSocket连接阿里云IoT物联网平台

    前言 之前写了一篇微信小程序使用MQTT over WebSocket连接阿里云IoT物联网平台,介绍了如何使用mqtt.js在微信小程序上连接mqtt服务器,文中顺带提了mqtt.js是支持支付宝小 ...

  9. 详细nginx配置websocket的wss协议

    需求: 小程序连接websocket,必须使用wss协议 nginx配置websocket以及wss协议 其实wss协议就是使用了ssl协议的域名所自带的协议,所以wss协议需要域名来进行socket ...

最新文章

  1. Spring事务——Spring 2.X的事务配置策略
  2. iOS:自己写的一个星级评价的小Demo
  3. 2.7 json 模块
  4. vba代码编程800例_一组实用的VBA常用编程代码语句分享
  5. python中的逻辑关系
  6. JS、JQuery和ExtJs的跨域处理
  7. CentOS 7安装zabbix-2.4.8监控
  8. 网络杂谈, Docker, MongoDB
  9. Linux上Libevent的安装
  10. 菜鸟的学习之路(9) — ArrayList类
  11. 小米android手机怎么刷机,小米4手机怎么刷机 小米4刷机图文教程
  12. JAVA根据开始时间和结束时间获取天数
  13. 美团和饿了么分别有什么优势和劣势?
  14. 网站CDN图片加速访问
  15. Python中time.sleep(0.001)真的只等待1毫秒吗?
  16. MQTT——java简单测试(二)
  17. 大三小学期进阶课程第二十一课:reinforcement learning and data driven approaches
  18. 非标资产与标准资产_资产商店行动新闻– 2011年10月!
  19. php实现视频转gif,一种在线视频转GIF的方法与流程
  20. 一些恶搞人的C++程序(千万别试,会哭的)

热门文章

  1. 沃森和特朗普:一家伟大美国企业的兴与衰
  2. 微信小程序:各种Tab栏
  3. 打印端口用计算机名,打印机端口名改不了怎么解决 如何解决打印机端口名改不了问题...
  4. opencv实现车牌识别之字符分割
  5. vue 高德地图api爬坑之路(一)初始化
  6. 让你成熟至少5岁的8句话
  7. 1.5功能播报:搜狐畅言社会化评论系统智能应用
  8. ac自动机(模板+一点点小优化)
  9. 华为1220s配置url过滤,规范员工上网行为
  10. 安卓商城选择商品规格