我正在开发一个iOS应用程序,该应用程序需要连接web套接字服务器。
我可以成功连接到服务器,但当我在服务器上发送请求时,它会断开连接。
我正在使用蜘蛛侠库作为网络套接字。
根据服务器支持团队:它不支持协议压缩,但在下面的标题中,它们请求";渗透放气";我们会接受未压缩的消息(这只是数据包上的一个标志),但由于他们要求的扩展,我们发送的消息将使用该标志集进行压缩
我使用Swift 发送如下请求
let dict = ["Parameter1":"value1","Parameter2":"value2"]
do {
let data = try NSJSONSerialization.dataWithJSONObject(dict, options: NSJSONWritingOptions(rawValue: 0))
var jsonString: String = String(data: data, encoding: UInt())!
self.socket.writeString(jsonString);
} catch {
print(error)
}
它与服务器断开连接并打印以下消息。
";websocket断开连接:可选("当前不支持屏蔽和rsv数据")
服务器支持团队的意思是,来自WebSocket客户端应用程序的请求包含如下所示的HTTP标头。
Sec-WebSocket-Extensions: permessage-deflate
所以,如果你的应用程序有下面这样的行,请删除它
socket.headers["Sec-WebSocket-Extensions"] = "permessage-deflate"
如果服务器不接受传入连接(无论原因如何),或者服务器崩溃,也可能引发此错误。基本上,当这个消息出现时,最好的操作是检查服务器上发生了什么,因为你可能在浪费时间尝试改进客户端代码(我也遇到过这种情况:)
对于那些在尝试连接到后端WebSocket时面临此问题的人,请确保socket.io的前端和后端版本兼容。运行以下命令为我修复了问题。
pod update
将两者更新为最新版本并解决了问题。
我相信这将解决您的问题。只需添加";wamp";在这样的标题中。
*
var request = URLRequest(url: URL(string: URL)!)
request.setValue(["wamp"].joined(separator: ","), forHTTPHeaderField: "Sec-WebSocket-Protocol")
socket = WebSocket(request: request)
socket.delegate = self
socket.connect()