CBrother写的websocket聊天室代码分析

本文分析了CBrother的WebSocket聊天室代码,探讨了WebSocket相对于http轮询的优势,如实现长连接、双向通信和实时性提升。还详细解释了WebSocket的握手过程,协议头的构成,并对前端和后端的实现进行了说明。通过实例展示了WebSocket如何简化网络聊天室的开发,降低服务器压力。
摘要由CSDN通过智能技术生成

CBrother脚本websocket聊天室代码分析

CBrother从1.0.7版本开始支持websocket,虽然我是做web开发的,但是websocket也还暂时没有用过,所以就学习了一下。

WebSocket比http轮询的优势

WebSocket协议简单的说就是浏览器和服务器建立长连接,全双工双向通信,服务器可以主动推送消息到浏览器,浏览器也可以主动发送消息给服务器。

比如用http协议开发一个网络聊天室如下:

张三 服务器 李四 有人发言吗? 有人发言吗? 大家好! 有人发言吗? 李四说:大家好 张三 服务器 李四

如果用websocket协议开发会变成:

张三 服务器 李四 连接成功 连接成功 大家好! 李四说:大家好 张三 服务器 李四

可以看出来,客户端不用轮询了,提高了实时性,也降低了服务器压力。

WebSocket握手过程

WebSocket协议的建立需要先借助HTTP协议,在服务器返回101状态码之后,就可以进行websocket全双工双向通信了,就没有HTTP协议什么事情了

  1. 浏览器先发起一个get请求
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: RCfYMqhgCo4N4E+cIZ0iPg==
Sec-WebSocket-Version: 13

Upgrade: websocket 表示我要升级协议到websocket
Connection: Upgrade 表示连接不要关闭,交给升级后的协议处理
Sec-WebSocket-Key: RCfYMqhgCo4N4E+cIZ0iPg==为客户端随机生成的一个key
Sec-WebSocket-Version: 13为协议版本号,目前来看必须是13
  1. 服务器回复
	HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: upgrade
Sec-WebSocket-Accept: b7RAFizjwDE9lWS46ZMPfmN35wc=

HTTP/1.1 101 Switching Protocols 表示服务器同意升级协议
Upgrade: websocket 表示升级为websocket
Connection: upgrade 表示连接不要关闭,交给升级后的协议处理

Sec-WebSocket-Accept: b7RAFizjwDE9lWS46ZMPfmN35wc=
 是服务器计算用客户端Sec-WebSocket-Key算出的值BASE64(SHA1(Sec-WebSocket-Key+"258EAFA5-E914-47DA-95CA-C5AB0DC85B11"))
  1. 协议升级完毕
    客户端对照服务器的Sec-WebSocket-Accept,如果正确表示协议升级成功。
    如果是通过https协议开始升级而来的,那么一般是wss://开头,如果是http协议开始升级而来的,那么一般是ws://开头

WebSocket协议头

  0                   1                   2                   3
  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
 +-+-+-+-+-------+-+-------------+-------------------------------+
 |F|R|R|R| opcode|M| Payload len |    Extended payload length    |
 |I|S|S|S|  (4)  |A|     (7)     |             (16/64)           |
 |N|V|V|V|       
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值