背景
websocket是html5提出的新的协议规范,填补了无法长连接的空缺。在没有websocket之前,由于http是短连接,只能由客户端请求服务器,一些功能(即时通讯/处理耗时的请求等)只能通过轮询来做,不断的轮询服务器是否有新的消息。
websocket正是为了解决这个问题而生,websocket是一个长连接/全双工的协议。
优点
不用频繁送HTTP请求,只需要发送一个HTTP请求进行websocket握手,接下来则可以利用该TCP连接通过websocket协议通讯,避免了传输多个HTTP Header的浪费。
全双工通道,突破了HTTP请求时只能client请求server的限制,server可以直接push消息给client端。
可以边生成数据边传递,不需要等数据生成完毕,提高了效率
websocket数据传输是基于数据帧的,可以分片传输,不需要怕数据太大包容纳不下。
websocket协议包含三个过程。
1. 握手打开连接(使用HTTP协议,通过HTTP协议建立连接,以免服务器不支持websocket直接不予回应)
2. 数据传输
3. 握手结束连接
最近在做一个将数据通过WIFI发给服务器的项目,让手机实时的显示数据波形,开始直接使用http协议,发给服务器端,用网络调试工具可以正常接收,但是与服务器对接的时候,服务器端总是收不到数据或者接收错误,原来服务器端使用的是websocket的协议,于是改用TCP,socket链接,链接IP和port后,发送http header
POST /hc-mc/user/device/dev22/UpdateDeviceInfo HTTP/1.1
Host: 192.168.1.155
Connection: Upgrade
Upgrade: websocket
Origin: /*/
发送http header的时候要注意,最后要加\r\n\r\n,不然服务器端不认为接收到数据或者有时接收到,这可能是服务器端的程序问题。