Hi, how to custom the endpoint, is there any document or example? I want to manage the sending and receiving of bytes myself. Thank you. 在2015年10月7日星期三 UTC+8 05:41:26<Nicolas Noble> 写道:
> Well, so there's really 3 layers in gRPC. > > 1. There's what we call the endpoint, which in our case is currently TCP. > The role of an endpoint is to send and receive bytes, and signal the upper > layers of events, such as connection lost, or there's bytes ready to read. > The API for that one is really simple, and I think we've reached the point > where it's mature enough it's not going to change. So writing another > endpoint should prove fairly stable over time. It's not a guarantee > however, and we kind of reserve the right to break that API in the future. > We don't have any plan to expose it above the C core. Meaning that we've > made it so that one could provide a plugin to gRPC to add another endpoint. > Now that plugin on your side could be written in any language you want, as > long as it provides a C interface for the core to use. We might move this > to the official, immutable API some time. > > 2. Then there's the transport, which right now is HTTP2. It's used to > transport the RPC payloads, and also to transport metadata. These metadata > are encoded using HTTP headers. Here's the actual details of that: > https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md - if you > wanted to change the transport, you'd also need to make sure the metadata > are properly encoded and transmitted. Which is why I was suggesting NOT > changing that layer, but rather the endpoint one, so you only have to > implement the first layer that is pumping bytes from one side to another. > You wouldn't have to worry about the metadata. > > 3. Finally there's the actual RPC payload. gRPC technically doesn't care > about what's in that payload. Our examples and some upper layers of the > code are using protobuf, but the C++ layer should let you use any kind of > payload you want instead. The code should already be there to allow for > that. More specifically, from my memory, there should be a generic > template, and a protobuf-specific one, in the C++ headers. So, JSON, > flatbuffers, or XML, what you want, just specialize the template. > > On Tue, Oct 6, 2015 at 1:53 PM, Pavol Ostertag <[email protected]> > wrote: > >> Thank you for comprehensive answer. Comprehensive answers produce more >> questions, so here are mine :) >> >> >> >> 1. Is it planned to make that plumbing in C++ official in the future? (so >> that the plumbing does not need to be rewritten with every GRPC update) >> >> 2. If I am getting you right, you suggest tunneling HTTP2 through LPC or >> DNS. Interesting idea >> >> 3. Would it be similarly easy to replace serializer (or marshaller) with >> another one serializing into XML? (in our company the transfer to GRPC >> would be far easier if the change can be done in two-steps - clients first >> and backend later, when "GRPC client" deployments reach some level) >> >> >> >> *From:* Nicolas Noble [mailto:[email protected]] >> *Sent:* Tuesday, October 06, 2015 10:17 PM >> *To:* [email protected] >> *Cc:* grpc.io <[email protected]> >> *Subject:* Re: [grpc-io] Custom channels >> >> >> >> The way it works is lower level than that. What you want is a transport >> implementation, not a channel implementation. Transports aren't exposed to >> the C++ interface, so you'll have to add them to the C core. This is >> located in https://github.com/grpc/grpc/tree/master/src/core/transport - >> and if you want a protocol that isn't HTTP2, this is where you need to >> start poking at. More specifically, look at >> https://github.com/grpc/grpc/blob/master/src/core/transport/transport_impl.h >> and this is where you'll see the interface used by the rest of the code to >> "talk protocol". >> >> >> >> There's probably some plumbing needed to properly bubble up the transport >> switch to the C++ API however. >> >> >> >> >> >> But given what you are talking about, it seems you rather want an >> endpoint instead. This might prove easier. It'll still use HTTP2 as an >> encapsulating protocol, but not on top of a TCP connection. What I am >> saying is that I am arguing that HTTP2 and "LPC" are two complementary >> things, not interchangeable. But TCP and LPC are. >> >> >> >> This is the code that is located there instead: >> https://github.com/grpc/grpc/tree/master/src/core/iomgr - there is a >> Windows and a Linux / posix implementation of TCP endpoints. If you add >> another endpoint, the core will use your code instead, and the plumbing to >> change it at runtime should already be there and easier to use. >> >> >> >> On Tue, Oct 6, 2015 at 7:59 AM, <[email protected]> wrote: >> >> >> Hello. I looked at current release of grpc++ and I still do not >> understand how to create channel not based on HTTP2. >> >> My examples are: >> >> 1. I want to build custom channel that instead of HTTP2 uses >> Inter-Process Communication (LPC on Windows). >> 2. I want to build custom channel that instead of HTTP2 uses DNS >> tunelling >> >> Inside generated code, every reference to Channel is to grpc::Channel. >> >> - Can I create custom channel and inject it into grpc? >> - Can I have more implementations of Channel at once? >> - Can I switch these implementations at runtime? >> >> >> Thank you. >> >> -- >> You received this message because you are subscribed to the Google Groups >> "grpc.io" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected]. >> To post to this group, send email to [email protected]. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/grpc-io/e93585f6-30d2-462c-867b-6b6ff3b063de%40googlegroups.com >> >> <https://groups.google.com/d/msgid/grpc-io/e93585f6-30d2-462c-867b-6b6ff3b063de%40googlegroups.com?utm_medium=email&utm_source=footer> >> . >> For more options, visit https://groups.google.com/d/optout. >> >> >> > -- You received this message because you are subscribed to the Google Groups "grpc.io" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/grpc-io/2944b8ff-116c-47b1-adaa-facb988cfa52n%40googlegroups.com.
