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

来源:互联网 发布:外婆的澎湖湾 知乎 编辑:程序博客网 时间:2024/06/11 08:58

运行环境:使用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以后这个问题会解决。

阅读全文
0 0
原创粉丝点击