Прослушивание данных с использованием Wt Framework

Легко создать веб-страницу с Wt на любом порту, например, 200.59.43.32:3333.

Однако есть ли функция (которую я не могу найти) для прослушивания того же порта, когда кто-то отправляет на него данные (некоторая строка данных, json и т. Д.). Другими словами, если кто-то отправит строку с данными «много данных» на 200.59.43.32:3333, как я могу перехватить ее с помощью Wt?

Изменить: Если это невозможно с простой строкой, это возможно с надлежащим JSON?

Я знаю, что могу открыть другой порт для прослушивания такой строки, используя (linux) socket / bind и т.д ..

1

Решение

Если вы хотите отправить простые строки, вам нужно открыть сокет. HTTP-приложения общаются с клиентами по протоколу HTTP, поэтому для этого «Wt-way» необходимо выполнить HTTP-запрос, GET или POST.

Из того, что я понимаю, вам нужно создать WResource и зарегистрируйте его на сервере, используя WServer::addResource() дать ему фиксированный URL. После этого переопределения WResource::handleRequest() для доступа к данным HTTP-запроса.

0

Другие решения

Если это просто случайные данные, я не знаю, что вы можете сделать это с помощью Wt. В этом случае вы можете использовать решение обратного прокси-сервера, такое как HAProxy, и перенаправлять любой HTTP-трафик на Wt, а любой другой трафик на другой сокет.

Если вы говорите о HTTP-трафике, статические ресурсы могут быть тем, что вам нужно. Реализация Wt Тесты инфраструктуры TechEmpower содержит некоторые пользовательские статические ресурсы, на которых вы можете основывать свой код. Например, есть 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!";
}
};

Вы можете использовать request переменная для получения любых данных о запросе, см. Wt :: Http :: Запрос.

Вы можете сделать этот ресурс доступным вот так:

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;
}
}
0

По вопросам рекламы [email protected]