benchmark.cpp 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. #include <Poco/Net/ServerSocket.h>
  2. #include <Poco/Net/HTTPServer.h>
  3. #include <Poco/Net/HTTPRequestHandler.h>
  4. #include <Poco/Net/HTTPRequestHandlerFactory.h>
  5. #include <Poco/Net/HTTPResponse.h>
  6. #include <Poco/Net/HTTPServerRequest.h>
  7. #include <Poco/Net/HTTPServerResponse.h>
  8. #include <Poco/Util/ServerApplication.h>
  9. #include <iostream>
  10. #include <string>
  11. #include <vector>
  12. #define PLAIN_URL_PATH "/plaintext"
  13. #define PLAIN_CONTENT_TYPE "text/plain"
  14. #define RES_BODY "Hello, World!"
  15. #define SERVER_NAME "poco"
  16. using namespace Poco::Net;
  17. using namespace Poco::Util;
  18. using namespace std;
  19. class MyRequestHandler : public HTTPRequestHandler {
  20. public:
  21. virtual void handleRequest(HTTPServerRequest &req, HTTPServerResponse &resp) {
  22. resp.setStatusAndReason(HTTPResponse::HTTP_OK, "OK");
  23. resp.setContentType(PLAIN_CONTENT_TYPE);
  24. resp.add("Server", SERVER_NAME);
  25. resp.sendBuffer(RES_BODY, sizeof(RES_BODY)-1);
  26. return;
  27. }
  28. };
  29. class NotFoundRequestHandler : public HTTPRequestHandler {
  30. public:
  31. virtual void handleRequest(HTTPServerRequest &req, HTTPServerResponse &resp) {
  32. resp.setStatusAndReason(HTTPResponse::HTTP_NOT_FOUND, "NOT_FOUND");
  33. resp.setContentType(PLAIN_CONTENT_TYPE);
  34. resp.add("Server", SERVER_NAME);
  35. resp.sendBuffer("", 0);
  36. return;
  37. }
  38. };
  39. class MyRequestHandlerFactory : public HTTPRequestHandlerFactory {
  40. public:
  41. virtual HTTPRequestHandler* createRequestHandler(const HTTPServerRequest &req) {
  42. if (req.getMethod() == "GET" && req.getURI() == PLAIN_URL_PATH)
  43. return new MyRequestHandler;
  44. else
  45. return new NotFoundRequestHandler;
  46. }
  47. };
  48. class MyServerApp : public ServerApplication {
  49. protected:
  50. int main(const vector<string> &args) {
  51. HTTPServerParams* hsp = new HTTPServerParams;
  52. hsp->setMaxThreads(stoi(args[1]));
  53. hsp->setKeepAlive(true);
  54. HTTPServer s(new MyRequestHandlerFactory, ServerSocket(stoi(args[0]), 4000), hsp);
  55. s.start();
  56. waitForTerminationRequest();
  57. s.stop();
  58. return Application::EXIT_OK;
  59. }
  60. };
  61. int main(int argc, char** argv) {
  62. if (argc != 3) {
  63. std::cerr << "Usage: " << argv[0] << " port nthreads" << std::endl;
  64. return 1;
  65. }
  66. MyServerApp app;
  67. return app.run(argc, argv);
  68. }