本文主要是介绍TSINGSEE青犀视频编译Winsock2 websocket服务端连接异常断开问题排查,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
websocket是独立的、创建在 TCP 上的协议,用户可以扩展协议、实现部分自定义的子协议。我们在编译WebRTC时,采用websocket进行通信,在写Window c++ websocket服务端时,客户端连接出现以下连接信息,但是在客户端测试websocket消息时,控制台不打断户端发出消息。
在网上查找了一番,原来客户端连接请求发出,websocket服务要通过固定格式再次发给客户端,这样就是代表建立连接成了。
在服务端启动时,客户端首先发送握手消息请求(请看上图),里面有个最重要的一行信息Sec-WebSocket-Key的数值,但是这个数值是随机生成的。需要对这个信息按照固定方式进行加密然后反馈给客户端。其实就是请求把协议升级到websocket协议,需要同意并按照规矩加密数据传回去。
服务器返回握手消息给客户端,Sec-WebSocket-Key就是加密后的数据(请看下图),最后websocket需要以\r\n\r\n结尾,不然会导致websocket连接断开和接收不到消息。
最后就是普通的websocket通讯了。唯一不同的是,来的数据使用的掩码处理的,去的时候别用掩码处理。不然这样违反规则websocket会立马断开并报异常,导致连接再次断开。
我们解决问题的方式是通过字符串拼接,并发送以下信息,这样建立连接成功:
"HTTP/1.1 101 Switching Protocols\r\n"
"Connection: Upgrade\r\n"
"Sec-WebSocket-Accept: " + 此处是进行websocket加密建立连接的数据(握手动作的关键所在) + "\r\n"
"Upgrade: websocket\r\n\r\n"
这样剩下的通信基本和websocket一样,唯一不同的是客户端和服务端都是经过加密的,所以拿到数据要进行解密才能看到具体数据。
这篇关于TSINGSEE青犀视频编译Winsock2 websocket服务端连接异常断开问题排查的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!