examples/cpp/keyvaluestore/server.cc
Go to the documentation of this file.
1 /*
2  *
3  * Copyright 2018 gRPC authors.
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  */
18 
19 #include <iostream>
20 #include <memory>
21 #include <string>
22 #include <vector>
23 
24 #include <grpcpp/grpcpp.h>
25 
26 #ifdef BAZEL_BUILD
27 #include "examples/protos/keyvaluestore.grpc.pb.h"
28 #else
29 #include "keyvaluestore.grpc.pb.h"
30 #endif
31 
32 using grpc::Server;
36 using grpc::Status;
37 using keyvaluestore::KeyValueStore;
40 
41 struct kv_pair {
42  const char* key;
43  const char* value;
44 };
45 
46 static const kv_pair kvs_map[] = {
47  {"key1", "value1"}, {"key2", "value2"}, {"key3", "value3"},
48  {"key4", "value4"}, {"key5", "value5"},
49 };
50 
51 const char* get_value_from_map(const char* key) {
52  for (size_t i = 0; i < sizeof(kvs_map) / sizeof(kv_pair); ++i) {
53  if (strcmp(key, kvs_map[i].key) == 0) {
54  return kvs_map[i].value;
55  }
56  }
57  return "";
58 }
59 
60 // Logic and data behind the server's behavior.
61 class KeyValueStoreServiceImpl final : public KeyValueStore::Service {
65  while (stream->Read(&request)) {
67  response.set_value(get_value_from_map(request.key().c_str()));
68  stream->Write(response);
69  }
70  return Status::OK;
71  }
72 };
73 
74 void RunServer() {
75  std::string server_address("0.0.0.0:50051");
77 
79  // Listen on the given address without any authentication mechanism.
81  // Register "service" as the instance through which we'll communicate with
82  // clients. In this case, it corresponds to an *synchronous* service.
83  builder.RegisterService(&service);
84  // Finally assemble the server.
85  std::unique_ptr<Server> server(builder.BuildAndStart());
86  std::cout << "Server listening on " << server_address << std::endl;
87 
88  // Wait for the server to shutdown. Note that some other thread must be
89  // responsible for shutting down the server for this call to ever return.
90  server->Wait();
91 }
92 
93 int main(int argc, char** argv) {
94  RunServer();
95 
96  return 0;
97 }
grpc::ServerContext
Definition: grpcpp/impl/codegen/server_context.h:566
benchmark.request
request
Definition: benchmark.py:77
testing::internal::string
::std::string string
Definition: bloaty/third_party/protobuf/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:881
framework.rpc.grpc_channelz.Server
Server
Definition: grpc_channelz.py:42
OK
@ OK
Definition: cronet_status.h:43
grpc::ServerReaderWriter
Definition: grpcpp/impl/codegen/sync_stream.h:786
get_value_from_map
const char * get_value_from_map(const char *key)
Definition: examples/cpp/keyvaluestore/server.cc:51
server_address
std::string server_address("0.0.0.0:10000")
kv_pair::key
const char * key
Definition: examples/cpp/keyvaluestore/server.cc:42
server
std::unique_ptr< Server > server
Definition: channelz_service_test.cc:330
profile_analyzer.builder
builder
Definition: profile_analyzer.py:159
main
int main(int argc, char **argv)
Definition: examples/cpp/keyvaluestore/server.cc:93
grpc::ServerBuilder
A builder class for the creation and startup of grpc::Server instances.
Definition: grpcpp/server_builder.h:86
KeyValueStoreServiceImpl::GetValues
Status GetValues(ServerContext *context, ServerReaderWriter< Response, Request > *stream) override
Definition: examples/cpp/keyvaluestore/server.cc:62
grpcpp.h
KeyValueStoreServiceImpl
Definition: examples/cpp/keyvaluestore/server.cc:61
kv_pair::value
const char * value
Definition: examples/cpp/keyvaluestore/server.cc:43
key
const char * key
Definition: hpack_parser_table.cc:164
server
Definition: examples/python/async_streaming/server.py:1
asyncio_get_stats.response
response
Definition: asyncio_get_stats.py:28
kv_pair
Definition: examples/cpp/keyvaluestore/server.cc:41
grpc::protobuf::util::Status
GRPC_CUSTOM_UTIL_STATUS Status
Definition: include/grpcpp/impl/codegen/config_protobuf.h:93
grpc::Status
Definition: include/grpcpp/impl/codegen/status.h:35
kvs_map
static const kv_pair kvs_map[]
Definition: examples/cpp/keyvaluestore/server.cc:46
grpc::InsecureServerCredentials
std::shared_ptr< ServerCredentials > InsecureServerCredentials()
Definition: insecure_server_credentials.cc:52
demo_pb2.Request
Request
Definition: demo_pb2.py:108
context
grpc::ClientContext context
Definition: istio_echo_server_lib.cc:61
service
__attribute__((deprecated("Please use GRPCProtoMethod."))) @interface ProtoMethod NSString * service
Definition: ProtoMethod.h:25
demo_pb2.Response
Response
Definition: demo_pb2.py:115
RunServer
void RunServer()
Definition: examples/cpp/keyvaluestore/server.cc:74
i
uint64_t i
Definition: abseil-cpp/absl/container/btree_benchmark.cc:230
stream
voidpf stream
Definition: bloaty/third_party/zlib/contrib/minizip/ioapi.h:136


grpc
Author(s):
autogenerated on Fri May 16 2025 03:00:10