您的位置:首页 > 移动开发 > Swift

解决swift实现的websocket与后台通信问题:websocket is disconnected: masked and rev data is not currently supported

2017-05-23 09:21 966 查看
运行环境:使用websocket通信,客户端是iOS APP,使用swift写的websocket库Starstream2.0,在模拟器上运行,服务端是Java的spring-websocket框架。

问题描述:当客户端和服务端都按官方文档提供的标准写法写好后,出现websocket is disconnected: Invalid HTTP upgrade错误,经过一翻查找讨论,为websocket客户端这边建立链接时加上http头信息,如下:

socket.headers["Sec-WebSocket-Version"] = "13"
socket.headers["Sec-WebSocket-Extensions"] = "permessage-deflate"
socket.headers["Pragma"] = "no-cache"
socket.headers["Cache-Control"] = "no-cache"
socket.headers["Origin"] = "http://yourself ip"
socket.headers["Encoding"] = "gzip,deflate,sdch"
socket.headers["Accept-Language"] = "zh-CN,zh;q=0.8"
socket.headers["User-Agent"] = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.154 Safari/537.36 LBBROWSER)"


之后可以建立链接,但此时iOS APP向服务端发送信息,服务端是可以正常接收解析,而服务端返回的信息,在iOS APP收到后,提示websocket is disconnected: masked and rev data is not currently supported后断开链接。在GitHub上的Starscream问题讨论区找到解决办法(checkout line: https://github.com/daltoniam/Starscream/issues/46):

//socket.headers["Sec-WebSocket-Extensions"] = "permessage-deflate" //需要去掉这里的压缩格式

之后可以正常通信。

待验证:和使用的Startscream版本有关系,我这里用的版本比较低,所以会出现这种情况,当升级到2.4.3以后这个问题会解决。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐