grpc_server.h 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. #ifndef GRPC_SERVER_H
  2. #define GRPC_SERVER_H
  3. #include "grpcpp/grpcpp.h"
  4. using grpc::ServerBuilder;
  5. using grpc::Server;
  6. using grpc::Service;
  7. using grpc::ServerCompletionQueue;
  8. // GRPC_DEFAULT_MAX_RECV_MESSAGE_LENGTH = 4M
  9. // GRPC_DEFAULT_MAX_SEND_MESSAGE_LENGTH = 4M
  10. #define GRPC_MAX_RECV_MESSAGE_LENGTH 1<<24 // 16M
  11. #define GRPC_MAX_SEND_MESSAGE_LENGTH 1<<24 // 16M
  12. class GrpcServer {
  13. public:
  14. GrpcServer(int port) : _port(port) {
  15. char srvaddr[128] = {0};
  16. snprintf(srvaddr, sizeof(srvaddr), "%s:%d", "0.0.0.0", _port);
  17. build_.AddListeningPort(srvaddr, grpc::InsecureServerCredentials());
  18. build_.AddChannelArgument(GRPC_ARG_KEEPALIVE_TIME_MS, 30000);
  19. build_.AddChannelArgument(GRPC_ARG_KEEPALIVE_TIMEOUT_MS, 5000);
  20. build_.AddChannelArgument(GRPC_ARG_KEEPALIVE_PERMIT_WITHOUT_CALLS, 1);
  21. build_.SetMaxReceiveMessageSize(GRPC_MAX_RECV_MESSAGE_LENGTH);
  22. build_.SetMaxSendMessageSize(GRPC_MAX_SEND_MESSAGE_LENGTH);
  23. }
  24. void RegisterService(Service* service) {
  25. build_.RegisterService(service);
  26. }
  27. void Run(bool wait=true) {
  28. server_ = build_.BuildAndStart();
  29. if (wait) {
  30. server_->Wait();
  31. }
  32. }
  33. public:
  34. int _port;
  35. ServerBuilder build_;
  36. std::unique_ptr<Server> server_;
  37. };
  38. #endif // GRPC_SERVER_H