Écouter des données en utilisant le framework Wt

Il est facile de créer une page Web avec Wt sur n’importe quel port, par exemple 200.59.43.32:3333.

Cependant, existe-t-il une fonction (que je ne peux pas trouver) pour écouter sur le même port lorsque quelqu’un lui envoie des données (certaines chaînes de données, json, etc.). En d’autres termes, si quelqu’un envoie une chaîne de données “beaucoup de données” à 200.59.43.32:3333, comment puis-je la capturer en utilisant Wt?

Edit: Si ce n’est pas possible avec une chaîne simple, est-ce possible avec un JSON approprié?

Je sais que je pourrais ouvrir un autre port pour écouter une telle chaîne en utilisant (linux) socket / bind, etc.

Si vous souhaitez envoyer des chaînes simples, vous devez ouvrir un socket. Les applications HTTP communiquent avec les clients via le protocole HTTP. Pour ce faire, vous devez effectuer une requête HTTP, GET ou POST.

D’après ce que j’ai compris, vous devez créer un WResource et l’enregistrer dans le serveur en utilisant WServer::addResource() pour lui donner une URL fixe. Après cette réimplémentation, WResource::handleRequest() pour accéder aux données de requête HTTP.

S’il ne s’agit que de données aléatoires, il est impossible que je sache que vous pouvez le faire avec Wt. Dans ce cas, vous pouvez utiliser une solution de proxy inverse comme HAProxy et transférer tout trafic HTTP vers Wt et tout autre trafic vers un autre socket.

Si vous parlez du trafic HTTP, les ressources statiques peuvent être ce que vous recherchez. L’implémentation par Wt des benchmarks du framework TechEmpower contient des ressources statiques personnalisées sur lesquelles vous pouvez baser votre code. Par exemple, il y a le PlaintextResource :

 class PlaintextResource : public Wt::WResource { virtual void handleRequest(const Wt::Http::Request &request, Wt::Http::Response &response) { response.setMimeType("text/plain"); response.addHeader("Server", "Wt"); response.out() << "Hello, World!"; } }; 

Vous pouvez utiliser la variable de request pour récupérer des données sur la requête, voir Wt :: Http :: Request .

Vous pouvez rendre cette ressource accessible comme ceci:

 int main(int argc, char** argv) { try { Wt::WServer server(argv[0]); server.setServerConfiguration(argc, argv, WTHTTP_CONFIGURATION); PlaintextResource plaintextResource; server.addResource(&plaintextResource, "/plaintext"); if (server.start()) { int sig = Wt::WServer::waitForShutdown(argv[0]); std::cerr << "Shutdown (signal = " << sig << ")" << std::endl; server.stop(); } } catch (Wt::WServer::Exception& e) { std::cerr << e.what() << "\n"; return 1; } catch (std::exception& e) { std::cerr << "exception: " << e.what() << "\n"; return 1; } }