Lor*_*bis 6 ping websocket swift
我使用Apple提供的URLSessionWebSocketTask来设置websocket。我接收、发送消息并且可以发送 ping。但是我应该如何接收和响应来自 ws 服务器的 ping?我必须使用向客户端发送 ping 的服务器来检查它们是否仍然存在。
如果我从服务器收到某些信息,我如何识别来自该服务器的 ping?收到的消息中是否有一些密钥代码?
func receive() {
webSocketTask.receive { result in
print(result)
switch result {
case .failure(let error):
print("Failed to receive message: \(error)")
....
case .success(let message):
switch message {
case .data(let data):
print("\(data)")
....
case .string(let text):
print("\(text)")
.....
@unknown default:
fatalError()
}
}
receive()
}
}
Run Code Online (Sandbox Code Playgroud)
上面当然是一段常见的代码,但是我应该实现什么来响应来自连接服务器的 ping ?我确实阅读了几个文档,但找不到任何内容、任何指示或建议。
我确实找到了以下 OpCode0x9和0xA. 那些是“乒”和“乒”吗?我可以发送 a 0x9as ping 和 for pong a吗0xA?如果我尝试将此作为短信,但没有得到任何反应。应该是一个框架吗?那么我到底做错了什么?
这需要一些挖掘,但您必须.pong在NWProtocolWebSocket.Metadata对象中设置操作码,然后将其输入到函数context中的参数中NWconnection.send。您的数据应反映 ping 中发送的内容。
let metadata = NWProtocolWebSocket.Metadata(opcode: .pong)
let context = NWConnection.ContentContext(identifier: "context", metadata: [metadata])
client.send(content: data, contentContext: context, isComplete: true, completion: .contentProcessed({ error in
if let error = error {
print(error.localizedDescription)
} else {
// no-op
}
}))
Run Code Online (Sandbox Code Playgroud)
在这种情况下,客户是你的NWConnection
| 归档时间: |
|
| 查看次数: |
696 次 |
| 最近记录: |