23 Apr 2022
En el post anterior mostré mi primer aplicación con Drogon y dejé el puerto 8081 “hardcodeado”, lo cual no es buena práctica. En este post voy a parametrizar el puerto que escuchará nuestro servidor, dejando un valor por defecto si no se especifica cuando ejecutemos la aplicación.
Para que nuestra aplicación sea capaz de recibir argumentos de entrada, vamos a cambiar la función int main
en el archivo main.cc
:
#include <sstream>
#include <drogon/drogon.h>
int main(int argc, char *argv[]) {
int port = 80;
if (argc >= 2)
{
std::istringstream iss(argv[1]);
int val;
if (iss >> val)
{
port = val;
}
}
//Set HTTP listener address and port
drogon::app()
.addListener("0.0.0.0", port)
.setDocumentRoot("docroot");
...
Hemos agregado la librería sstream
para poder usar la clase istringstream
, necesaria para convertir nuestro argumento de entrada, que es un char*, a un número entero.
Si ejecutamos nuestra aplicación seguida de un número entero, por ejemplo ./invoicer 8082
, éste será nuestro puerto. Y si la ejecutamos sin ningún argumento, ./invoicer
, nuestro servidor escuchará el puerto 80.
¿Qué pasa si ejecutamos nuestra aplicación con unas letras como argumento?
Si ejecutamos ./invoicer xyz
, la conversión a entero, iss >> val
, fallará y no se ejecutará la línea port = val;
, lo cual dejará el puerto con el valor 80.
Como último paso, vamos a escribir una línea de texto en la consola indicando el puerto que estamos escuchando. Vamos a introducir el siguiente cambio, justo después de quedar definido el valor de nuestra variable port
:
int main(int argc, char *argv[]) {
int port = 80;
if (argc >= 2)
{
std::istringstream iss(argv[1]);
int val;
if (iss >> val)
{
port = val;
}
}
std::cout << "Starting app listening port " << port << std::endl;
//Set HTTP listener address and port
//...
En este pull request dejo el cambio que será mergeado a nuestra rama principal: Make port parametrizable.
¡Tu mensaje fue recibido! Una vez que sea aprobado, estará visible para los demás visitantes.
Cerrar