很容易在任何端口上創建Wt網頁,例如200.59.43.32:3333。使用Wt框架監聽數據
然而,當有人向它發送數據(一些數據字符串,json等)時,是否有一個函數(我找不到)在相同的端口上偵聽。換句話說,如果有人向200.59.43.32:3333發送了一個字符串「大量數據」的數據,我該如何使用Wt來捕獲它?
編輯:如果用純字符串不可能,用適當的JSON可以嗎?
我知道我可以打開另一個端口使用(Linux)的插座/綁定等這樣的字符串來聽..
很容易在任何端口上創建Wt網頁,例如200.59.43.32:3333。使用Wt框架監聽數據
然而,當有人向它發送數據(一些數據字符串,json等)時,是否有一個函數(我找不到)在相同的端口上偵聽。換句話說,如果有人向200.59.43.32:3333發送了一個字符串「大量數據」的數據,我該如何使用Wt來捕獲它?
編輯:如果用純字符串不可能,用適當的JSON可以嗎?
我知道我可以打開另一個端口使用(Linux)的插座/綁定等這樣的字符串來聽..
如果你想發送純字符串,你需要打開一個套接字。 HTTP應用程序使用HTTP協議與客戶端進行通信,因此要執行此「Wt-way」,您應該執行HTTP請求,GET或POST。
據我所知,你需要創建一個WResource
並在服務器上使用WServer::addResource()
註冊它,給它一個固定的URL。之後重新執行WResource::handleRequest()
來訪問HTTP請求數據。
如果它只是隨機數據,我不知道你可以用Wt來做。在這種情況下,您可以使用HAProxy等反向代理解決方案,並將任何HTTP流量轉發至Wt,並將任何其他流量轉發至其他套接字。
如果你在談論HTTP流量,靜態資源可能就是你所追求的。 Wt對TechEmpower framework benchmarks的實現包含一些自定義靜態資源,您可以將代碼放在上面。例如,有個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::Request。
您可以作出這樣這個資源訪問:
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;
}
}
謝謝你,如果該字符串是正確的JSON雖然? – Levi
如果您通過HTTP發送JSON,則可以從'request.in()'中檢索JSON,它將返回一個'std :: istream&'。 然後你可以用'Wt :: Json :: parse()'解析它,參見https://www.webtoolkit.eu/wt/doc/reference/html/namespaceWt_1_1Json.html – RockinRoel