At least for gRPC GoLang, Custom Transports are not currently supported.

On Wednesday, May 10, 2023 at 10:44:03 PM UTC-4 Saigut wrote:

> 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/44468092-7d5a-4a96-951a-e0c4bfd8d4c4n%40googlegroups.com.

Reply via email to