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.

La manera correcta de conectarse a un servidor Socket.IO usando Golang.

Estoy aprendiendo Go y estoy tratando de usar esta biblioteca para implementar un cliente de socket.io en Go.

Estoy intentando conectarme desde un cliente (escrito en Go) a un servidor de Socket.IO Node.js. He tenido algunos problemas al conectarme al servidor de Node.js, la conexión siempre falla con “websocket: bad handshake” sin ninguna salida en el lado del servidor y ninguna de las respuestas disponibles en la web me ha dado una solución funcional todavía.

Siento que podría haber encontrado la causa de mi problema. Según lo que he leído en la documentación de NPM para socket.io:

Nota: Socket.IO no es una implementación de WebSocket. Aunque Socket.IO utiliza WebSocket como transporte cuando es posible, agrega metadatos a cada paquete: el tipo de paquete, el espacio de nombres y el ID de confirmación cuando se necesita una confirmación de mensaje. Es por eso que un cliente WebSocket no podrá conectarse con éxito a un servidor Socket.IO, y un cliente Socket.IO no podrá conectarse a un servidor WebSocket (como ws://echo.websocket.org) tampoco.

Sin embargo, la biblioteca de cliente socket.io que utilizo (llamada go-socketio) solo me permite conectarme a un servidor socket.io usando los protocolos ws o wss, por lo tanto no funciona y no puedo conectarme a mi servidor de socket.io Node.js.

¿Existe una forma adecuada de conectarse a un servidor de Socket.IO Node.js desde un cliente basado en Go? Todos los artículos que he leído que documentan esto solo muestran un servidor socket.io basado en Go, no un cliente. He probado varias bibliotecas de cliente y ninguna de ellas funciona (o no tienen suficiente documentación que muestre cómo usar la biblioteca como cliente que se conecta a un servidor) 🙁

(Estaría dispuesto a usar otra biblioteca de comunicación bidireccional que Go pueda tener mejor soporte, siempre y cuando el lado del servidor pueda estar escrito en Node.js y permita el uso de Express.js junto a él, ya que el resto del servidor está escrito en Node.js y usa Express.js)

Gracias de antemano y por favor, infórmeme si necesita más información para responder esta pregunta.

(Actualmente no estoy en casa y, por lo tanto, no puedo subir fragmentos de código, pero lo haré una vez que llegue a casa)

Tags:  ,

Answer

  1. Avatar for davy.ai

    Desafortunadamente, parece que la biblioteca go-socketio actualmente no soporta la conexión a un servidor Socket.IO desde un cliente basado en Go debido a los metadatos adicionales que Socket.IO agrega a cada paquete.

    Una posibilidad podría ser utilizar otra biblioteca de comunicación bidireccional que tenga un mejor soporte para clientes Go y que se pueda utilizar junto con Node.js y Express.js en el lado del servidor. Algunas opciones a considerar podrían ser gRPC, NATS o RabbitMQ.

    También podría ser útil comunicarse con los desarrolladores de la biblioteca go-socketio u otras bibliotecas de clientes socket.io basadas en Go para solicitar soporte o añadir funcionalidad para conectarse a servidores Socket.IO.

    Para poder solucionar el problema de forma más específica y brindar una solución más concreta, sería útil ver fragmentos de código y más información sobre los errores específicos y las configuraciones que se están utilizando.

Comments are closed.