es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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\")] })"
}

Tags:  , , ,

Answer

  1. Avatar for 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:

    app.webSocket("hello") { req, ws in
        let headers = HTTPHeaders([
            ("binance-api-key", "api-key"),
            ("binance-api-secret", "api-secret"),
            ("signature", "dcad576d5d0d9e25ee3fe427b0a50cdf9adec8ec528be05c9f1f7c684ee165f0")
        ])
    
        WebSocket.connect(to: "wss://stream.binance.com:9443", headers: headers, on: req.eventLoop) { result in
            switch result {
            case .failure(let error):
                print("Error de conexión WebSocket: \(error)")
            case .success(let ws):
                ws.onText { ws, text in
                    print("Mensaje recibido: \(text)")
                    // Maneja el mensaje entrante aquí
                }
                ws.send("Hola, mundo!")
                // Envía mensajes salientes aquí
            }
        }
    }
    

    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étodo onText para manejar los mensajes entrantes y el método send 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.

Comments are closed.