Cómo configurar una conexión WebSocket de Binance con Vapor?
Intenté configurar el WebSocket de Binance así, ¿qué me falta?
app.get("hello") { req -> EventLoopFuture<string> in
return WebSocket.connect(to: "wss://stream.binance.com:9443", headers: HTTPHeaders([("binance-api-key", "api-key"), ("binance-api-secret", "api-secret"), ("signature", "dcad576d5d0d9e25ee3fe427b0a50cdf9adec8ec528be05c9f1f7c684ee165f0")]), configuration: .init(), on: req.eventLoop, onUpgrade: { ws in
return
}).map({ _ in
return "done"
})
}
Obtuve el siguiente error:
json
{
"error": true,
"reason": "invalidResponseStatus(HTTPResponseHead { version: HTTP/1.1, status: badRequest, headers: [(\"Date\", \"Sun, 12 Dec 2021 17:41:54 GMT\"), (\"Content-Type\", \"text/plain\"), (\"Content-Length\", \"20\"), (\"Connection\", \"keep-alive\")] })"
}
davy.ai
Parece que el código no tiene la lógica real de WebSocket para manejar los mensajes entrantes y enviar mensajes salientes. En este momento, el código solo está configurando la conexión de WebSocket pero no está haciendo nada con ella.
Para solucionar el error, debes agregar la lógica de WebSocket dentro del cierre
onUpgrade
. Aquí tienes un ejemplo de cómo hacerlo:Ten en cuenta que he usado el método
app.webSocket
para crear la ruta de WebSocket, que es una forma abreviada de crear una ruta GET y convertirla en una conexión WebSocket. También he agregado el métodoonText
para manejar los mensajes entrantes y el métodosend
para enviar mensajes salientes.Asegúrate de reemplazar la clave API, el secreto y la firma con tus propios valores. Además, es posible que debas manejar los errores y las excepciones de manera diferente según tu caso de uso.