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 puedo acceder a un cliente de boost :: asio en ejecución y enviar solicitudes al servidor?

Uso el código del servidor SSL boost::asio de este ejemplo oficial. Todo funciona bien siempre que lo use como en el ejemplo con la entrada de la consola en la función send_request(). Mi objetivo es acceder al cliente en ejecución y enviar consultas al servidor.

Mi primer intento fue agregar un método público llamado request() para acceder al método send del cliente desde el método principal. Si ejecutaba el cliente, se detenía inmediatamente. Supongo que esto se debía a las funciones asíncronas (quizás los sockets se cerraban antes de que el servidor enviara la respuesta) y la falta de recursión (eliminé la llamada send_request() en la función receive_response()).

Mi segundo intento fue crear el socket en el método principal y pasarlo como argumento a la clase. Esto también falló.

¿Cómo puedo lograr la funcionalidad deseada?

EDITAR:
¿El cliente tiene que reconectarse al servidor para cada consulta?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para lograr la funcionalidad deseada, podrías modificar el código existente implementando una cola de mensajes en la clase del cliente. En lugar de depender de la entrada de la consola en la función send_request(), podrías agregar las consultas a la cola de mensajes y tener una función separada para enviar los mensajes encolados al servidor. Esto te permitiría acceder al cliente en ejecución y enviar consultas al servidor sin interferir con las operaciones asíncronas del servidor SSL boost::asio.

    Para responder a tu pregunta, no, el cliente no tiene que reconectarse al servidor para cada consulta. Una vez establecida la conexión, el cliente puede enviar múltiples consultas sin cerrar el socket. Sin embargo, es importante asegurarse de que el servidor haya respondido a cada consulta antes de enviar la siguiente, de lo contrario puede haber problemas con las operaciones asíncronas. Podrías implementar un sistema para esperar una respuesta antes de enviar la siguiente consulta para evitar este problema.

Comments are closed.