很容易在任何端口上创建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