• websokect的原理


    WebSocket 机制

    以下简要介绍一下WebSocket的原理及运行机制。

    WebSocket是HTML5下一种新的协议。它实现了浏览器与服务器全双工通信,能更好的节省服务器资源和带宽并达到实时通讯的目的。它与HTTP一样通过已建立的TCP连接来传输数据,但是它和HTTP最大不同是:

    • WebSocket是一种双向通信协议。在建立连接后,WebSocket服务器端和客户端都能主动向对方发送或接收数据,就像Socket一样;
    • WebSocket需要像TCP一样,先建立连接,连接成功后才能相互通信。

    传统HTTP客户端与服务器请求响应模式如下图所示:

    WebSocket模式客户端与服务器请求响应模式如下图:

    上图对比可以看出,相对于传统HTTP每次请求-应答都需要客户端与服务端建立连接的模式,WebSocket是类似Socket的TCP长连接通讯模式。一旦WebSocket连接建立后,后续数据都以帧序列的形式传输。在客户端断开WebSocket连接或Server端中断连接前,不需要客户端和服务端重新发起连接请求。在海量并发及客户端与服务器交互负载流量大的情况下,极大的节省了网络带宽资源的消耗,有明显的性能优势,且客户端发送和接受消息是在同一个持久连接上发起,实时性优势明显。

    相比HTTP长连接,WebSocket有以下特点:

    • 是真正的全双工方式,建立连接后客户端与服务器端是完全平等的,可以互相主动请求。而HTTP长连接基于HTTP,是传统的客户端对服务器发起请求的模式。
    • HTTP长连接中,每次数据交换除了真正的数据部分外,服务器和客户端还要大量交换HTTP header,信息交换效率很低。Websocket协议通过第一个request建立了TCP连接之后,之后交换的数据都不需要发送 HTTP header就能交换数据,这显然和原有的HTTP协议有区别所以它需要对服务器和客户端都进行升级才能实现(主流浏览器都已支持HTML5)。此外还有 multiplexing、不同的URL可以复用同一个WebSocket连接等功能。这些都是HTTP长连接不能做到的。

    下面再通过客户端和服务端交互的报文对比WebSocket通讯与传统HTTP的不同点:

    在客户端,new WebSocket实例化一个新的WebSocket客户端对象,请求类似 ws://yourdomain:port/path 的服务端WebSocket URL,客户端WebSocket对象会自动解析并识别为WebSocket请求,并连接服务端端口,执行双方握手过程,客户端发送数据格式类似:

    GET /webfin/websocket/ HTTP/1.1
    Host: localhost
    Upgrade: websocket
    Connection: Upgrade
    Sec-WebSocket-Key: xqBt3ImNzJbYqRINxEFlkg==
    Origin: http://localhost:8080
    Sec-WebSocket-Version: 13

    可以看到,客户端发起的WebSocket连接报文类似传统HTTP报文,Upgrade:websocket参数值表明这是WebSocket类型请求,Sec-WebSocket-Key是WebSocket客户端发送的一个 base64编码的密文,要求服务端必须返回一个对应加密的Sec-WebSocket-Accept应答,否则客户端会抛出Error during WebSocket handshake错误,并关闭连接。

    服务端收到报文后返回的数据格式类似:

    HTTP/1.1 101 Switching Protocols
    Upgrade: websocket
    Connection: Upgrade
    Sec-WebSocket-Accept: K7DJLdLooIwIG/MOpvWFB3y3FE8=

    Sec-WebSocket-Accept的值是服务端采用与客户端一致的密钥计算出来后返回客户端的,HTTP/1.1 101 Switching Protocols表示服务端接受WebSocket协议的客户端连接,经过这样的请求-响应处理后,两端的WebSocket连接握手成功, 后续就可以进行TCP通讯了。用户可以查阅WebSocket协议栈了解WebSocket客户端和服务端更详细的交互数据格式。

    在开发方面,WebSocket API 也十分简单:只需要实例化 WebSocket,创建连接,然后服务端和客户端就可以相互发送和响应消息。在WebSocket 实现及案例分析部分可以看到详细的 WebSocket API 及代码实现。

    一个使用WebSocket应用于视频的业务思路如下:

    • 使用心跳维护websocket链路,探测客户端端的网红/主播是否在线
    • 设置负载均衡7层的proxy_read_timeout默认为60s
    • 设置心跳为50s,即可长期保持Websocket不断开

    引自:https://cloud.tencent.com/document/product/214/4150?fromSource=gwzcw.93403.93403.93403

    更多的内容见:http://www.52im.net/thread-326-1-1.html

  • 相关阅读:
    Silverlight学习笔记十六自定义控件之一个漂亮的Gauge(仪表盘)
    上百例Silverlight网站及演示汇总,供友参考
    Silverlight3D文字效果
    Android学习笔记之AndroidManifest.xml文件解析
    Silverlight的扩展对话框(带有窗体图标)
    Silverlight学习笔记十八最简单的添加双击事件的实现方法
    Android学习笔记之Android包、ADB介绍
    Silverlight学习笔记十四自定义控件之加载时的图形
    一个Silverlight超炫网站反编译后(附源代码)
    Android学习笔记之反编译工具介绍及下载(Class文件反编译,xml文件反编译整理)
  • 原文地址:https://www.cnblogs.com/myzy/p/8577099.html
Copyright © 2020-2023  润新知