我使用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()
}
}
上面的当然是一个常见的代码片段,但是我应该实现什么来响应来自连接服务器的ping呢?我确实读了一些文档,但没有找到任何东西,任何指针或建议。
编辑:我确实发现了以下操作码0x9和0xA。那些是乒乓球和乒乓球吗?ping可以发送0x9, pong可以发送0xA吗?如果我试着发短信,但我没有回应。应该是框架吗?那么,我错在哪里呢?
谢谢。
这需要一些挖掘,但是你必须在NWProtocolWebSocket中设置Opcode为.pong。元数据对象,然后进入NWconnection中的上下文参数。发送函数。您的数据应该反映在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
}
}))
客户端在这里是你的NWConnection