精华内容
下载资源
问答
  • 2022-02-11 14:57:14

    websocket是什么,用在哪里?

    websocket与http都属于tcp/ip协议簇中的应用层协议,基于tcp协议,主要用于浏览器和服务器通信。

    websocket与http

    http是request-reply模式,只能由client先发数据;而websocket中,server可以主动发送数据给client。

    http也是可以做长连接的, 只是一般不这么用;websocket一般用作长连接。

    对于传输数据不大的情况下,http包头所占字节比较多,消息利用率不高,需要自定义协议。

    自定义协议由两部分组成:

    1. tcp包本身的信息,比如包长,新建连接,断开连接等,网络相关;
    2. 业务协议,json、xml等。

    websocket就是解决这个问题的,websocket只定义了tcp包本身的信息,业务协议可以自己去定义,类似自定义协议。

    websocket应用场景

    微博即时聊天,qq、微信网页版即时聊天,比分网页版实时,股票行情,可以用websocket来做。

    websocket,普遍的使用场景,用于服务器主动推送给浏览器, b/s模式的实时通信。websocket并不仅限于浏览器和服务器之间的实时通信。

    websocket协议格式

    1. tcp连接建立后,客户端发送的第一个包是符合http协议头的,handshake。为了兼容http。

    img

    1. handshake完成后,再发送的包就不符合http协议了,是websocket协议。

    img

    websocket协议,参考rfc6455

    websocket客户端如何验证服务器合法

    靠handshake来验证合法性

    client发送的第一个包:

    img

    Upgrade说明是websocket协议

    Sec-WebSocket-Key是用来进行验证的,具体方法如下:

    // Sec-WebSocket-Key + GUID
    str = "nwnCsQI3P/SqZ6I2dyyfFA==258EAFA5-E914-47DA-95CA-C5AB0DC85B11"
    
    sha = SHA1(str);
    
    sec_websocket_accept = base64_encode(sha);
    

    之后发送respose给client, 客户端对Sec_Websocket_Accept进行验证。

    img

    websocket协议

    img

    handshake后,再发送的包就符合websocket协议。包分为两部分,一部分是header,另一部分是payload。http使用特殊字符\r\n来界定包;而websocket则是在header中包含payload length指定包的长度。具体协议参考rfc6455

    FIN: 1 bit

    ​ Indicates that this is the final fragment in a message. The first fragment MAY also be the final fragment.

    Opcode: 4 bits

    ​ Defines the interpretation of the “Payload data”. If an unknown opcode is received, the receiving endpoint MUST Fail the WebSocket Connection. The following values are defined.

    • %x0 denotes a continuation frame

    • %x1 denotes a text frame

    • %x2 denotes a binary frame

    • %x3-7 are reserved for further non-control frames

    • %x8 denotes a connection close

    • %x9 denotes a ping

    • %xA denotes a pong

    • %xB-F are reserved for further control frames

    0x8表示关闭连接。

    Mask: 1 bit

    ​ Defines whether the “Payload data” is masked. If set to 1, a masking key is present in masking-key. All frames sent from client to server have this bit set to 1.

    Payload length: 7 bits, 7+16 bits, or 7+64 bits

    ​ The length of the “Payload data”, in bytes: if 0-125, that is the payload length. If 126, the following 2 bytes interpreted as a 16-bit unsigned integer are the payload length. If 127, the following 8 bytes interpreted as a 64-bit unsigned integer (the most significant bit MUST be 0) are the payload length.

    Masking-key: 0 or 4 bytes

    ​ All frames sent from the client to the server are masked by a 32-bit value that is contained within the frame. This field is present if the mask bit is set to 1 and is absent if the mask bit is set to 0.

    明文与密文如何传输

    mask = 0,传明文

    mask = 1,传密文

    如果mask=1,则websocket的包头中就会有4个字节的masking-key

    // transformed-octet-i = original-octet-i XOR masking-key-octet-j
    j = i%4 // i MOD 4, masking-key是4个字节
    payload[i] ^= masking_key[j]; // 发送端进行一次异或;接收端再次进行异或操作,得到原始内容
    

    websocket如何断开

    自定义协议为什么要进行close?

    既然TCP有close操作,为什么websocket还要留一个opcode来断开?

    这样做可以先在应用层把业务处理完成,然后再调用tcp的close,能做到更好的回收。

    websocket状态机

    websocket的状态机,只有时间顺序,没有状态迁移。

    handshake->tranmission->end

    enum {
    	WS_HANDSHAKE = 0,
    	WS_TRANSMISSION = 1,
    	WS_END = 2,
    };
    

    websocket handshake与tcp三次握手关系

    tcp三次握手完成后,websocket协议还有一次握手。

    总结

    websocket是一个应用层协议,主要用于服务器主动推送消息给浏览器。websocket要比http简单很多。

    更多相关内容
  • Minecraft具有可用于连接到Websocket服务器的Websocket连接命令。 这些命令是/connect和/wsserver 。 这两个命令具有相同的效果。 连接到网络套接字后,连接将一直持续到服务器关闭它或玩家完全退出游戏为止。 当...
  • 易语言websocket服务器

    2020-07-20 05:08:52
    易语言websocket服务器源码,websocket服务器,握手包处理,生成握手参数列,创建返回握手包,返回数据包处理,接收数据包解码,高级截取文本,取sha1,切片,ord,字节集到十六进制,十六进制到字节集,取十进制,取数值,utf8到...
  • nodejs-websocket 基于node创建websocket服务器 websocket 协议和 http 协议类似,http 协议有一个缺陷,只能由客户方端发起请求,服务端根据请求 url 和传过去的参数返回对应结果 websocket 是双向通信的,只要 ...
  • 这个代码例子使用了c c++实现了websocket 开发 包含了websocket服务器和websocket客户端,拥有详细的解释 这个库比libwebsocket更加简单方便,比libsocket更加高效便捷.
  • E自带组件搭建Websocket服务器,可以收发消息
  • websocket是一个浏览器和服务器通信的新的协议,websocket则和一般的socket一样,使得浏览器和服务器建立了一个双工的通道。今天我们就来详细探讨下使用Python实现websocket服务器的具体方法
  • Minnow Server Minnow Server是一种超小型且快速的嵌入式HTTP(S)WebSocket服务器,它使没有外部存储器的小型微控制器充当实时Web服务器。 Minnow Server包括用于随后的Minnow Server Minnow Server的端口层,...
  • 利用C++实现了websocket server, 使用libuv作为实现tcp的基础,另外使用gbase作为工具
  • 用于websocket服务器和客户端的Node.js模块 如何使用它 使用npm install nodejs-websocket安装,或将所有文件放在一个名为“ nodejs-websocket”的文件夹中,然后: var ws = require ( "nodejs-websocket" ) // ...
  • websocket服务器

    2022-05-27 14:09:55
    asp.net core 3.1 实现的websocket服务器,可分频道广播推送消息;已测
  • ESP 8266的Websocket守护程序 这是基于的Websocket实现。 该库使用的剥离版本作为基础。 即使Websocket实现完全独立于该代码,我还是以该项目为起点。 因此,感谢作者这个项目。 该代码为ESP8266 WiFi模块实现了...
  • 大神写的websocket服务器,但有内存报错,也没管内存释放,还有一些不完善的地方,我给弄好了 把ws.html放到你的网站。修改里面的ip。 编译和运行服务器端(我是centos下) gcc -g -o websocket websocket.c ...
  • WebSocket服务器端+Html5客户端,服务器端dotnet framework2.0,3.5,4.0,4.5都支持。
  • 利用C++ SOCKET编程,自我实现的一个websocket服务器,没有使用开源库,可以适用于学习使用
  • netty搭建tcp自定义协议websocket服务器, 支持ssl demo. 适用于netty初学者, netty搭建自定义协议, websocket服务器, 聊天室, 一个端口集成多协议,包括ssl协议
  • websockets:用于在Python中构建WebSocket服务器和客户端的库
  • 支持多连接的 ESP8266 Websocket 服务器 这是一个轻量级的 websocket 服务器库。 适用于 ESP8266 - 小巧但功能强大的 wifi SoC! 它实际上是从许多优秀的参考资料中移植过来的: (主要基于) - 一个轻量级的 ...
  • websocket服务器.rar

    2020-04-05 16:53:32
    websocket服务器.rar
  • ESP32 的WebSocket 服务器

    2019-05-07 15:25:27
    ESP32模块通过WebSocket 连接服务器服务器通过发送"OFF"打开灯,发送“ON”关闭灯,服务器来的数据打印出来,同时返回给服务器
  • websocket服务器和客户端,服务器C++,客户端html websocket服务器和客户端,服务器C++,客户端html
  • websocket服务器源码java 简单的WebSocket 适用于Java 6和更高版本的简单Java WebSocket Maven数据包! 该软件包已准备好编译和运行服务器。 服务器端口8080 ,您可以通过以下端口连接 有服务器命令 帮助显示命令...
  • 基于主题的WebSocket服务器和客户端 以Java,Node.js或AWS Lambda实现的基于主题的WebSocket服务器。 基于主题的WebSocket用例:根据服务器上发生的事件,来自UI的另一个实例或IoT设备的数据等将内容推送到Web应用...
  • Qt Websocket服务器和客户端实现。 现在不推荐使用该项目,因为Qt提供了websocket客户端和服务器协议的实现。 此处提供更多信息: : 执照 版权所有2013 Antoine Lafarge 该文件是QtWebsocket的一部分。 Qt...
  • 修改了 一个BUG 直接覆盖吧 博文链接:https://lchshu001.iteye.com/blog/1184428
  • 使用Netty搭建WebSocket服务器,该资源示范如何修改单包大小限制,解决不能发送大数据包的问题。
  • WebSocket服务器 WebSocket标准的一致服务器实现,作为PureBasic的模块。 特征: 支持未分段和分段的二进制和文本框架。 基于回调,易于使用且延迟低。 该模块自动组合片段帧,默认情况下处于启用状态,可以在...
  • 用户可通过SuperWebSocket来快速的构建可靠的,高性能的websocket服务器端应用程序。 和SuperSocket一样,SuperWebSocket可以控制台和windows服务的形式运行,同时它还支持直接运行在Website之内,这样更简化了...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 85,912
精华内容 34,364
关键字:

websocket服务器