使用 Wt 框架侦听数据

Listen on data using Wt framework

本文关键字:数据 框架 Wt 使用      更新时间:2023-10-16

在任何端口上创建带有Wt的网页都很容易,例如200.59.43.32:3333。

但是,当有人向同一端口发送数据(一些数据字符串、json 等(时,是否有一个函数(我找不到(可以侦听同一个端口。换句话说,如果有人将字符串"大量数据"数据发送到 200.59.43.32:3333,如何使用 Wt 捕获它?

编辑:如果使用纯字符串是不可能的,那么使用适当的 JSON 是否可以?

我知道我可以打开另一个端口来使用(linux(套接字/绑定等来侦听这样的字符串。

如果只是随机数据,我不可能知道你可以用 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::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;
}
}

如果要发送纯字符串,则需要打开一个套接字。HTTP应用程序使用HTTP协议与客户端通信,因此要执行此"Wt-way",您应该执行HTTP请求,GET或POST。

据我了解,您需要创建一个WResource并使用WServer::addResource()在服务器中注册它,以给它一个固定的 URL。之后,重新实现访问 HTTP 请求数据的WResource::handleRequest()