Comments (4)
In your proto file you would typically define a Service with multiple endpoints, like in the example. Then for each GrpcContext you register your request handler for each endpoint:
void register_handlers(agrpc::GrpcContext& grpc_context, example::v1::Example::AsyncService& service)
{
auto register_handler = [&](auto request_function, auto handler)
{
agrpc::repeatedly_request(request_function, service, asio::bind_executor(grpc_context, handler));
};
register_handler(&example::v1::Example::AsyncService::RequestUnary,
[&](grpc::ServerContext&, example::v1::Request&,
grpc::ServerAsyncResponseWriter<example::v1::Response>&) -> asio::awaitable<void>
{
co_return;
});
register_handler(&example::v1::Example::AsyncService::RequestServerStreaming,
[&](grpc::ServerContext&, example::v1::Request&,
grpc::ServerAsyncWriter<example::v1::Response>&) -> asio::awaitable<void>
{
co_return;
});
register_handler(&example::v1::Example::AsyncService::RequestClientStreaming,
[&](grpc::ServerContext&,
grpc::ServerAsyncReader<example::v1::Response, example::v1::Request>&) -> asio::awaitable<void>
{
co_return;
});
register_handler(&example::v1::Example::AsyncService::RequestBidirectionalStreaming,
[&](grpc::ServerContext&,
grpc::ServerAsyncReaderWriter<example::v1::Response, example::v1::Request>&) -> asio::awaitable<void>
{
co_return;
});
}
I hope that is what you were asking.
Regarding the generic server, I personally haven't had a use case for it but I know that someone experimented with haskell bindings for grpc and made use of it.
from asio-grpc.
Ok, thanks. I suppose this example also work for when each service has a different message type?
Also, are you implying I need one grpc-context and threfore one thread for each service? In the generic example I am using only one grpc-context and threfore only one thread.
from asio-grpc.
Correct, it also works for different message types. Interesting question, the documentation actually doesn't mention that and the examples use the same type for simplicity. I guess I could add an example for the official route guide.
You can have as many or few services and GprcContexts as you like. Have one context handle all services or multiple contexts handle multiple services, everything's possible.
from asio-grpc.
Thanks, this is solved now.
from asio-grpc.
Related Issues (20)
- Example with small changes crashes HOT 6
- Why I get const correctness problems HOT 16
- Using asynchronous gRPC server and client on same context HOT 9
- Asio-gRPC seems to have TSAN warnings HOT 8
- How to detect client closed connection HOT 6
- Can I call ServerBuilder::BuildAndStart() after GrpcContext::run() HOT 2
- Questions on how to switch from an GrpcContext to io_context and back HOT 6
- How to shutdown grpc clients HOT 1
- Clarification Needed on Thread Context Switch in writer() Function (example streaming-server.cpp) HOT 8
- assertion failed: !started_ HOT 2
- Can I use asio-grpc inside an existing boost::asio application? HOT 7
- The agrpc::GrpcContext hangs forever HOT 13
- an upgrade from 2.5.1 to 2.9.1 leads to build errors HOT 6
- build fails with latest boost 1.84 HOT 4
- [Question]: Slowly receiveing client in long-lived streaming HOT 1
- InvokeHandler conflicts with Objective-C/C++ defines HOT 1
- Need some basic help! HOT 9
- How to make grPC Client to Establish connection based on IP address? HOT 2
- Update conan package to 3.0.0 HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from asio-grpc.