Je pense que le multithreading est implicitement demandé dans le sujet. Sans on ne peux pas gérer simultanément l'écoute de plusieurs ports ou même des connections simultanées.
J'ai donc testé l'utilisation des threads en c98 :
#include "ConfigLoader.hpp"
#include "Server.hpp"
#include <thread>
int main(int argc, char* argv[]) {
if (argc > 2)
ErrorHandler::fatal("Too many arguments. usage : ./webserv [config_path]");
std::map<std::string, std::string> config;
try {
ConfigLoader& config = ConfigLoader::getInstance();
if (argc == 1)
config.loadConfig(ConfigLoader::DEFAULT_FILE_NAME);
else if (argc == 2)
config.loadConfig(argv[1]);
Server* server = new Server();
server->start();
} catch (const std::exception& e) {
ErrorHandler::exception(e);
return EXIT_FAILURE;
}
std::thread t1(callable);
// Wait for t1 to finish
t1.join();
// t1 has finished do other stuff
Statements;
return EXIT_SUCCESS;
}
Tout compile en C98 je suppose donc que ce n'est pas interdit, dans le sujet il y a écrit External Functions et pas Authorized.
Il faudrait donc réfléchir a une implémentation multi-threadée du programme.
Comme je vous l'ai expliqué sur discord, un port peux écouter pour plusieurs virtual server. Il faut donc lancer un thread pour chaque écoute de port. Peut être même ensuite pour chaque virtual server (pour gérer les requêtes simultanées).
Pour cela j'ai pensé a une classe PortListener qui lancera un thread pour chaque instanciations, on donnera au thread une routine pour ecouter sur le port configuré.
Il faudrait donc une classe RequestBroker qui pourrait rediriger la requête pour le server name (host) en header.
Ensuite chaque virtual server répond en fonction de sa config.
Je pense que le multithreading est implicitement demandé dans le sujet. Sans on ne peux pas gérer simultanément l'écoute de plusieurs ports ou même des connections simultanées.
J'ai donc testé l'utilisation des threads en c98 :
Tout compile en C98 je suppose donc que ce n'est pas interdit, dans le sujet il y a écrit External Functions et pas Authorized.
Il faudrait donc réfléchir a une implémentation multi-threadée du programme. Comme je vous l'ai expliqué sur discord, un port peux écouter pour plusieurs virtual server. Il faut donc lancer un thread pour chaque écoute de port. Peut être même ensuite pour chaque virtual server (pour gérer les requêtes simultanées).
Pour cela j'ai pensé a une classe PortListener qui lancera un thread pour chaque instanciations, on donnera au thread une routine pour ecouter sur le port configuré.
Il faudrait donc une classe RequestBroker qui pourrait rediriger la requête pour le server name (host) en header.
Ensuite chaque virtual server répond en fonction de sa config.
Qu'en pensez vous ? D'autres idées ?