Documentation
¶
Index ¶
- Variables
- func DefaultClientCallOpts() []grpc.CallOption
- func DefaultProxyOpt(cc *grpc.ClientConn) grpc.ServerOption
- func DefaultProxyServerOpt() grpc.ServerOption
- func NewProxy(dst *grpc.ClientConn, opts ...grpc.ServerOption) *grpc.Server
- func RegisterService(server *grpc.Server, director StreamDirector, serviceName string, ...)
- func TransparentHandler(director StreamDirector) grpc.StreamHandler
- type Handler
- type ProtoCodec
- type RawProtoCodec
- type RawProtoFrame
- type StreamDirector
Constants ¶
This section is empty.
Variables ¶
var BaseProtoCodec encoding.Codec = ProtoCodec{}
baseProtoCodec 提供标准 proto 编解码能力。 这里使用内部实现作为 fallback,避免 grpc-go 的 codec registry 未注册 "proto" 时返回 nil。
Functions ¶
func DefaultClientCallOpts ¶
func DefaultClientCallOpts() []grpc.CallOption
DefaultClientCallOpts 返回代理 client stream 的默认调用选项。 通过强制 codec,确保 client stream 使用与 server 侧一致的“原始 bytes”协议。
func DefaultProxyOpt ¶
func DefaultProxyOpt(cc *grpc.ClientConn) grpc.ServerOption
DefaultProxyOpt 返回 UnknownServiceHandler 配置,使 server 能转发“未注册的服务/方法”。
func DefaultProxyServerOpt ¶
func DefaultProxyServerOpt() grpc.ServerOption
DefaultProxyServerOpt 为代理 server 注入 codec。 该 codec 会把消息当作原始 bytes 透传,从而无需目标服务的具体消息类型。
func NewProxy ¶
func NewProxy(dst *grpc.ClientConn, opts ...grpc.ServerOption) *grpc.Server
NewProxy 创建一个透明代理 Server,并默认启用: - 原始 protobuf bytes 转发 codec(server 侧) - UnknownServiceHandler 透明转发(代理作为 client 连接到目标 server)
func RegisterService ¶
func RegisterService(server *grpc.Server, director StreamDirector, serviceName string, methodNames ...string)
RegisterService 注册代理服务
func TransparentHandler ¶
func TransparentHandler(director StreamDirector) grpc.StreamHandler
TransparentHandler 提供一个透明代理的方式: - 代理作为 gRPC server 接收入站请求 - 代理作为 gRPC client 连接到目标 server 并转发请求 返回值可以作为 grpc.UnknownServiceHandler 使用
Types ¶
type Handler ¶
type Handler struct {
// contains filtered or unexported fields
}
func (*Handler) ForwardInboundToOutbound ¶
func (h *Handler) ForwardInboundToOutbound(src grpc.ServerStream, dst grpc.ClientStream) chan error
func (*Handler) ForwardOutboundToInbound ¶
func (h *Handler) ForwardOutboundToInbound(src grpc.ClientStream, dst grpc.ServerStream) chan error
type ProtoCodec ¶
type ProtoCodec struct{}
ProtoCodec 是最小可用的 proto 编解码实现,仅用于 fallback。
func (ProtoCodec) Name ¶
func (ProtoCodec) Name() string
type RawProtoCodec ¶
type RawProtoCodec struct{}
RawProtoCodec 是代理 codec: - 若 v 是 *RawProtoFrame:直接透传 payload bytes - 否则:回退到 baseProtoCodec(标准 proto 编解码)
func (RawProtoCodec) Name ¶
func (RawProtoCodec) Name() string
type RawProtoFrame ¶
type RawProtoFrame struct {
// payload 为一条 protobuf message 的原始序列化结果。
Payload []byte
}
RawProtoFrame 是代理层的“消息容器”: - payload 保存原始 protobuf 消息 bytes - RawProtoFrame 会把 RecvMsg/SendMsg 的 v 识别为 *RawProtoFrame,并直接读写 payload
type StreamDirector ¶
type StreamDirector func(ctx context.Context, fullMethodName string) (context.Context, *grpc.ClientConn, error)
func DefaultDirector ¶
func DefaultDirector(cc *grpc.ClientConn) StreamDirector
DefaultDirector 返回一个固定目标连接的 director,并且会把 incoming metadata 复制到 outgoing context。