rpc

package
v1.3.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 13, 2020 License: Apache-2.0 Imports: 24 Imported by: 0

Documentation

Index

Constants

View Source
const (
	GettyOK   = ErrorCode(0x00)
	GettyFail = ErrorCode(0x01)
)
View Source
const (
	CodecUnknown  = CodecType(0x00)
	CodecJson     = CodecType(0x01)
	CodecProtobuf = CodecType(0x02)
)

Variables

View Source
var (
	ErrNotEnoughStream = jerrors.New("packet stream is not enough")
	ErrTooLargePackage = jerrors.New("package length is exceed the getty package's legal maximum length.")
	ErrInvalidPackage  = jerrors.New("invalid rpc package")
	ErrIllegalMagic    = jerrors.New("package magic is not right.")
)
View Source
var (
	ErrInvalidLengthCodec = fmt.Errorf("proto: negative length found during unmarshaling")
	ErrIntOverflowCodec   = fmt.Errorf("proto: integer overflow")
)
View Source
var CallType_name = map[int32]string{
	0: "CT_UNKNOWN",
	1: "CT_OneWay",
	2: "CT_TwoWay",
	3: "CT_TwoWayNoReply",
}
View Source
var CallType_value = map[string]int32{
	"CT_UNKNOWN":       0,
	"CT_OneWay":        1,
	"CT_TwoWay":        2,
	"CT_TwoWayNoReply": 3,
}
View Source
var (
	Codecs = map[CodecType]Codec{
		CodecJson:     &JSONCodec{},
		CodecProtobuf: &PBCodec{},
	}
)

Functions

This section is empty.

Types

type AsyncCallback added in v1.0.3

type AsyncCallback func(response CallResponse)

type CallOption added in v1.0.3

type CallOption func(*CallOptions)

func WithCallMeta added in v1.0.3

func WithCallMeta(k, v interface{}) CallOption

func WithCallRequestTimeout added in v1.0.3

func WithCallRequestTimeout(d time.Duration) CallOption

func WithCallResponseTimeout added in v1.0.3

func WithCallResponseTimeout(d time.Duration) CallOption

type CallOptions added in v1.0.3

type CallOptions struct {
	// request timeout
	RequestTimeout time.Duration
	// response timeout
	ResponseTimeout time.Duration
	Meta            map[interface{}]interface{}
}

type CallResponse added in v1.0.3

type CallResponse struct {
	Opts      CallOptions
	Cause     error
	Start     time.Time // invoke(call) start time == write start time
	ReadStart time.Time // read start time, write duration = ReadStart - Start
	Reply     interface{}
}

type CallType added in v0.9.3

type CallType int32
const (
	CT_UNKNOWN       CallType = 0
	CT_OneWay        CallType = 1
	CT_TwoWay        CallType = 2
	CT_TwoWayNoReply CallType = 3
)

func (CallType) Enum added in v0.9.3

func (x CallType) Enum() *CallType

func (CallType) EnumDescriptor added in v0.9.3

func (CallType) EnumDescriptor() ([]byte, []int)

func (CallType) MarshalJSON added in v0.9.3

func (x CallType) MarshalJSON() ([]byte, error)

func (CallType) String added in v0.9.3

func (x CallType) String() string

func (*CallType) UnmarshalJSON added in v0.9.3

func (x *CallType) UnmarshalJSON(data []byte) error

type Client

type Client struct {
	// contains filtered or unexported fields
}

func NewClient

func NewClient(conf *ClientConfig) (*Client, error)

func (*Client) AsyncCall added in v1.0.3

func (c *Client) AsyncCall(typ CodecType, addr, service, method string, args interface{},
	callback AsyncCallback, reply interface{}, opts ...CallOption) error

func (*Client) Call

func (c *Client) Call(typ CodecType, addr, service, method string, args, reply interface{}, opts ...CallOption) error

if @reply is nil, the transport layer will get the response without notify the invoker.

func (*Client) CallOneway added in v1.0.3

func (c *Client) CallOneway(typ CodecType, addr, service, method string, args interface{}, opts ...CallOption) error

call one way

func (*Client) Close

func (c *Client) Close()

type ClientConfig

type ClientConfig struct {
	// local address
	AppName     string `default:"rpc-client" yaml:"app_name" json:"app_name,omitempty"`
	Host        string `default:"127.0.0.1" yaml:"host" json:"host,omitempty"`
	ProfilePort int    `default:"10086" yaml:"profile_port" json:"profile_port,omitempty"`

	// session pool
	ConnectionNum int `default:"16" yaml:"connection_number" json:"connection_number,omitempty"`

	// heartbeat
	HeartbeatPeriod string `default:"15s" yaml:"heartbeat_period" json:"heartbeat_period,omitempty"`

	// session
	SessionTimeout string `default:"60s" yaml:"session_timeout" json:"session_timeout,omitempty"`

	// app
	FailFastTimeout string `default:"5s" yaml:"fail_fast_timeout" json:"fail_fast_timeout,omitempty"`

	// Connection Pool
	PoolSize int `default:"2" yaml:"pool_size" json:"pool_size,omitempty"`
	PoolTTL  int `default:"180" yaml:"pool_ttl" json:"pool_ttl,omitempty"`

	// session tcp parameters
	GettySessionParam GettySessionParam `required:"true" yaml:"getty_session_param" json:"getty_session_param,omitempty"`
	// contains filtered or unexported fields
}

Config holds supported types by the multiconfig package

func (*ClientConfig) CheckValidity added in v0.9.3

func (c *ClientConfig) CheckValidity() error

type Codec

type Codec interface {
	Encode(interface{}) ([]byte, error)
	Decode([]byte, interface{}) error
}

type CodecType added in v0.9.3

type CodecType int16

func GetCodecType added in v0.9.3

func GetCodecType(codecType string) CodecType

func (CodecType) CheckValidity added in v0.9.3

func (c CodecType) CheckValidity() bool

func (CodecType) String added in v0.9.3

func (c CodecType) String() string

type ErrorCode added in v1.0.2

type ErrorCode int16

type GettyPackage

type GettyPackage struct {
	H GettyPackageHeader
	B RPCPackage
}

func (*GettyPackage) Marshal

func (p *GettyPackage) Marshal() (*bytes.Buffer, error)

func (GettyPackage) String

func (p GettyPackage) String() string

func (*GettyPackage) Unmarshal

func (p *GettyPackage) Unmarshal(buf *bytes.Buffer) (int, error)

type GettyPackageHeader

type GettyPackageHeader struct {
	Magic     MagicType     // magic number
	Command   gettyCommand  // operation command code
	ServiceID ServiceIDType // service id
	Sequence  SequenceType  // request/response sequence
	LogID     LogIDType     // log id

	Code      ErrorCode  // error code
	CodecType CodecType  // codec type
	PkgLen    PkgLenType // package body length
}

type GettyRPCHeaderLenType

type GettyRPCHeaderLenType uint16

type GettyRPCRequest

type GettyRPCRequest struct {
	// contains filtered or unexported fields
}

func (*GettyRPCRequest) GetBody

func (req *GettyRPCRequest) GetBody() []byte

func (*GettyRPCRequest) GetHeader

func (req *GettyRPCRequest) GetHeader() interface{}

func (*GettyRPCRequest) Marshal

func (req *GettyRPCRequest) Marshal(sz CodecType, buf *bytes.Buffer) (int, error)

func (*GettyRPCRequest) Unmarshal

func (req *GettyRPCRequest) Unmarshal(ct CodecType, buf *bytes.Buffer) error

type GettyRPCRequestHeader

type GettyRPCRequestHeader struct {
	Service  string   `protobuf:"bytes,1,opt,name=Service" json:"Service"`
	Method   string   `protobuf:"bytes,2,opt,name=Method" json:"Method"`
	CallType CallType `protobuf:"varint,3,opt,name=CallType,enum=rpc.CallType" json:"CallType"`
}

func (*GettyRPCRequestHeader) Descriptor added in v0.9.3

func (*GettyRPCRequestHeader) Descriptor() ([]byte, []int)

func (*GettyRPCRequestHeader) Equal added in v0.9.3

func (this *GettyRPCRequestHeader) Equal(that interface{}) bool

func (*GettyRPCRequestHeader) GoString added in v0.9.3

func (this *GettyRPCRequestHeader) GoString() string

func (*GettyRPCRequestHeader) Marshal added in v0.9.3

func (m *GettyRPCRequestHeader) Marshal() (dAtA []byte, err error)

func (*GettyRPCRequestHeader) MarshalTo added in v0.9.3

func (m *GettyRPCRequestHeader) MarshalTo(dAtA []byte) (int, error)

func (*GettyRPCRequestHeader) ProtoMessage added in v0.9.3

func (*GettyRPCRequestHeader) ProtoMessage()

func (*GettyRPCRequestHeader) Reset added in v0.9.3

func (m *GettyRPCRequestHeader) Reset()

func (*GettyRPCRequestHeader) Size added in v0.9.3

func (m *GettyRPCRequestHeader) Size() (n int)

func (*GettyRPCRequestHeader) String added in v0.9.3

func (this *GettyRPCRequestHeader) String() string

func (*GettyRPCRequestHeader) Unmarshal added in v0.9.3

func (m *GettyRPCRequestHeader) Unmarshal(dAtA []byte) error

func (*GettyRPCRequestHeader) VerboseEqual added in v0.9.3

func (this *GettyRPCRequestHeader) VerboseEqual(that interface{}) error

func (*GettyRPCRequestHeader) XXX_DiscardUnknown added in v1.2.2

func (m *GettyRPCRequestHeader) XXX_DiscardUnknown()

func (*GettyRPCRequestHeader) XXX_Marshal added in v1.2.2

func (m *GettyRPCRequestHeader) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

func (*GettyRPCRequestHeader) XXX_Merge added in v1.2.2

func (m *GettyRPCRequestHeader) XXX_Merge(src proto.Message)

func (*GettyRPCRequestHeader) XXX_Size added in v1.2.2

func (m *GettyRPCRequestHeader) XXX_Size() int

func (*GettyRPCRequestHeader) XXX_Unmarshal added in v1.2.2

func (m *GettyRPCRequestHeader) XXX_Unmarshal(b []byte) error

type GettyRPCRequestPackage

type GettyRPCRequestPackage struct {
	H GettyPackageHeader
	// contains filtered or unexported fields
}

type GettyRPCResponse

type GettyRPCResponse struct {
	// contains filtered or unexported fields
}

func (*GettyRPCResponse) GetBody

func (resp *GettyRPCResponse) GetBody() []byte

func (*GettyRPCResponse) GetHeader

func (resp *GettyRPCResponse) GetHeader() interface{}

func (*GettyRPCResponse) Marshal

func (resp *GettyRPCResponse) Marshal(sz CodecType, buf *bytes.Buffer) (int, error)

func (*GettyRPCResponse) Unmarshal

func (resp *GettyRPCResponse) Unmarshal(sz CodecType, buf *bytes.Buffer) error

type GettyRPCResponseHeader

type GettyRPCResponseHeader struct {
	Error string `protobuf:"bytes,1,opt,name=Error" json:"Error"`
}

func (*GettyRPCResponseHeader) Descriptor added in v0.9.3

func (*GettyRPCResponseHeader) Descriptor() ([]byte, []int)

func (*GettyRPCResponseHeader) Equal added in v0.9.3

func (this *GettyRPCResponseHeader) Equal(that interface{}) bool

func (*GettyRPCResponseHeader) GoString added in v0.9.3

func (this *GettyRPCResponseHeader) GoString() string

func (*GettyRPCResponseHeader) Marshal added in v0.9.3

func (m *GettyRPCResponseHeader) Marshal() (dAtA []byte, err error)

func (*GettyRPCResponseHeader) MarshalTo added in v0.9.3

func (m *GettyRPCResponseHeader) MarshalTo(dAtA []byte) (int, error)

func (*GettyRPCResponseHeader) ProtoMessage added in v0.9.3

func (*GettyRPCResponseHeader) ProtoMessage()

func (*GettyRPCResponseHeader) Reset added in v0.9.3

func (m *GettyRPCResponseHeader) Reset()

func (*GettyRPCResponseHeader) Size added in v0.9.3

func (m *GettyRPCResponseHeader) Size() (n int)

func (*GettyRPCResponseHeader) String added in v0.9.3

func (this *GettyRPCResponseHeader) String() string

func (*GettyRPCResponseHeader) Unmarshal added in v0.9.3

func (m *GettyRPCResponseHeader) Unmarshal(dAtA []byte) error

func (*GettyRPCResponseHeader) VerboseEqual added in v0.9.3

func (this *GettyRPCResponseHeader) VerboseEqual(that interface{}) error

func (*GettyRPCResponseHeader) XXX_DiscardUnknown added in v1.2.2

func (m *GettyRPCResponseHeader) XXX_DiscardUnknown()

func (*GettyRPCResponseHeader) XXX_Marshal added in v1.2.2

func (m *GettyRPCResponseHeader) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

func (*GettyRPCResponseHeader) XXX_Merge added in v1.2.2

func (m *GettyRPCResponseHeader) XXX_Merge(src proto.Message)

func (*GettyRPCResponseHeader) XXX_Size added in v1.2.2

func (m *GettyRPCResponseHeader) XXX_Size() int

func (*GettyRPCResponseHeader) XXX_Unmarshal added in v1.2.2

func (m *GettyRPCResponseHeader) XXX_Unmarshal(b []byte) error

type GettyRPCResponsePackage

type GettyRPCResponsePackage struct {
	H GettyPackageHeader
	// contains filtered or unexported fields
}

type GettyRPCService added in v0.9.3

type GettyRPCService interface {
	Service() string // Service Interface
	Version() string
}

type GettySessionParam

type GettySessionParam struct {
	CompressEncoding bool   `default:"false" yaml:"compress_encoding" json:"compress_encoding,omitempty"`
	TcpNoDelay       bool   `default:"true" yaml:"tcp_no_delay" json:"tcp_no_delay,omitempty"`
	TcpKeepAlive     bool   `default:"true" yaml:"tcp_keep_alive" json:"tcp_keep_alive,omitempty"`
	KeepAlivePeriod  string `default:"180s" yaml:"keep_alive_period" json:"keep_alive_period,omitempty"`

	TcpRBufSize    int    `default:"262144" yaml:"tcp_r_buf_size" json:"tcp_r_buf_size,omitempty"`
	TcpWBufSize    int    `default:"65536" yaml:"tcp_w_buf_size" json:"tcp_w_buf_size,omitempty"`
	PkgWQSize      int    `default:"1024" yaml:"pkg_wq_size" json:"pkg_wq_size,omitempty"`
	TcpReadTimeout string `default:"1s" yaml:"tcp_read_timeout" json:"tcp_read_timeout,omitempty"`

	TcpWriteTimeout string `default:"5s" yaml:"tcp_write_timeout" json:"tcp_write_timeout,omitempty"`

	WaitTimeout string `default:"7s" yaml:"wait_timeout" json:"wait_timeout,omitempty"`

	MaxMsgLen   int    `default:"1024" yaml:"max_msg_len" json:"max_msg_len,omitempty"`
	SessionName string `default:"rpc" yaml:"session_name" json:"session_name,omitempty"`
	// contains filtered or unexported fields
}

func (*GettySessionParam) CheckValidity added in v0.9.3

func (c *GettySessionParam) CheckValidity() error

type JSONCodec

type JSONCodec struct{}

func (JSONCodec) Decode

func (c JSONCodec) Decode(data []byte, i interface{}) error

func (JSONCodec) Encode

func (c JSONCodec) Encode(i interface{}) ([]byte, error)

type LogIDType added in v0.9.3

type LogIDType int64

type MagicType added in v0.9.3

type MagicType int32

type PBCodec

type PBCodec struct{}

func (PBCodec) Decode

func (c PBCodec) Decode(buf []byte, msg interface{}) error

Decode parses the protocol buffer representation in buf and writes the decoded result to pb. If the struct underlying pb does not match the data in buf, the results can be unpredictable.

UnmarshalMerge merges into existing data in pb. Most code should use Unmarshal instead.

func (PBCodec) Encode

func (c PBCodec) Encode(msg interface{}) ([]byte, error)

Encode takes the protocol buffer and encodes it into the wire format, returning the data.

type PendingResponse

type PendingResponse struct {
	// contains filtered or unexported fields
}

func NewPendingResponse

func NewPendingResponse() *PendingResponse

func (PendingResponse) GetCallResponse added in v1.0.3

func (r PendingResponse) GetCallResponse() CallResponse

type PkgLenType added in v0.9.3

type PkgLenType int32

type RPCClientMap added in v1.1.0

type RPCClientMap struct {
	// contains filtered or unexported fields
}

Map is like a Go map[interface{}]interface{} but is safe for concurrent use by multiple goroutines without additional locking or coordination. Loads, stores, and deletes run in amortized constant time.

The Map type is specialized. Most code should use a plain Go map instead, with separate locking or coordination, for better type safety and to make it easier to maintain other invariants along with the map content.

The Map type is optimized for two common use cases: (1) when the entry for a given key is only ever written once but read many times, as in caches that only grow, or (2) when multiple goroutines read, write, and overwrite entries for disjoint sets of keys. In these two cases, use of a Map may significantly reduce lock contention compared to a Go map paired with a separate Mutex or RWMutex.

The zero Map is empty and ready for use. A Map must not be copied after first use.

func (*RPCClientMap) Delete added in v1.1.0

func (m *RPCClientMap) Delete(key string)

Delete deletes the value for a key.

func (*RPCClientMap) Load added in v1.1.0

func (m *RPCClientMap) Load(key string) (value *rpcClientArray, ok bool)

Load returns the value stored in the map for a key, or nil if no value is present. The ok result indicates whether value was found in the map.

func (*RPCClientMap) LoadOrStore added in v1.1.0

func (m *RPCClientMap) LoadOrStore(key string, value *rpcClientArray) (actual *rpcClientArray, loaded bool)

LoadOrStore returns the existing value for the key if present. Otherwise, it stores and returns the given value. The loaded result is true if the value was loaded, false if stored.

func (*RPCClientMap) Range added in v1.1.0

func (m *RPCClientMap) Range(f func(key string, value *rpcClientArray) bool)

Range calls f sequentially for each key and value present in the map. If f returns false, range stops the iteration.

Range does not necessarily correspond to any consistent snapshot of the Map's contents: no key will be visited more than once, but if the value for any key is stored or deleted concurrently, Range may reflect any mapping for that key from any point during the Range call.

Range may be O(N) with the number of elements in the map even if f returns false after a constant number of calls.

func (*RPCClientMap) Store added in v1.1.0

func (m *RPCClientMap) Store(key string, value *rpcClientArray)

Store sets the value for a key.

type RPCPackage

type RPCPackage interface {
	Marshal(CodecType, *bytes.Buffer) (int, error)
	// @buf length should be equal to GettyPkg.GettyPackageHeader.Len
	Unmarshal(sz CodecType, buf *bytes.Buffer) error
	GetBody() []byte
	GetHeader() interface{}
}

func NewGettyRPCRequest

func NewGettyRPCRequest() RPCPackage

func NewGettyRPCResponse

func NewGettyRPCResponse() RPCPackage

type RpcClientHandler

type RpcClientHandler struct {
	// contains filtered or unexported fields
}

func NewRpcClientHandler

func NewRpcClientHandler(client *gettyRPCClient) *RpcClientHandler

func (*RpcClientHandler) OnClose

func (h *RpcClientHandler) OnClose(session getty.Session)

func (*RpcClientHandler) OnCron

func (h *RpcClientHandler) OnCron(session getty.Session)

func (*RpcClientHandler) OnError

func (h *RpcClientHandler) OnError(session getty.Session, err error)

func (*RpcClientHandler) OnMessage

func (h *RpcClientHandler) OnMessage(session getty.Session, pkg interface{})

func (*RpcClientHandler) OnOpen

func (h *RpcClientHandler) OnOpen(session getty.Session) error

type RpcClientPackageHandler

type RpcClientPackageHandler struct{}

func (*RpcClientPackageHandler) Read

func (p *RpcClientPackageHandler) Read(ss getty.Session, data []byte) (interface{}, int, error)

func (*RpcClientPackageHandler) Write

func (p *RpcClientPackageHandler) Write(ss getty.Session, pkg interface{}) ([]byte, error)

type RpcServerHandler

type RpcServerHandler struct {
	// contains filtered or unexported fields
}

func NewRpcServerHandler

func NewRpcServerHandler(maxSessionNum int, sessionTimeout time.Duration) *RpcServerHandler

func (*RpcServerHandler) OnClose

func (h *RpcServerHandler) OnClose(session getty.Session)

func (*RpcServerHandler) OnCron

func (h *RpcServerHandler) OnCron(session getty.Session)

func (*RpcServerHandler) OnError

func (h *RpcServerHandler) OnError(session getty.Session, err error)

func (*RpcServerHandler) OnMessage

func (h *RpcServerHandler) OnMessage(session getty.Session, pkg interface{})

func (*RpcServerHandler) OnOpen

func (h *RpcServerHandler) OnOpen(session getty.Session) error

type RpcServerPackageHandler

type RpcServerPackageHandler struct {
	// contains filtered or unexported fields
}

func NewRpcServerPackageHandler

func NewRpcServerPackageHandler(server *Server) *RpcServerPackageHandler

func (*RpcServerPackageHandler) Read

func (p *RpcServerPackageHandler) Read(ss getty.Session, data []byte) (interface{}, int, error)

func (*RpcServerPackageHandler) Write

func (p *RpcServerPackageHandler) Write(ss getty.Session, pkg interface{}) ([]byte, error)

type SequenceType added in v0.9.3

type SequenceType uint64

type Server

type Server struct {
	// contains filtered or unexported fields
}

func NewServer

func NewServer(conf *ServerConfig) (*Server, error)

func (*Server) Register

func (s *Server) Register(rcvr GettyRPCService) error

func (*Server) Start added in v0.9.3

func (s *Server) Start()

func (*Server) Stop

func (s *Server) Stop()

type ServerConfig

type ServerConfig struct {
	// local address
	AppName     string   `default:"rpc-server" yaml:"app_name" json:"app_name,omitempty"`
	Host        string   `default:"127.0.0.1" yaml:"host" json:"host,omitempty"`
	Ports       []string `yaml:"ports" json:"ports,omitempty"` // `default:["10000"]`
	ProfilePort int      `default:"10086" yaml:"profile_port" json:"profile_port,omitempty"`

	// session
	SessionTimeout string `default:"60s" yaml:"session_timeout" json:"session_timeout,omitempty"`

	SessionNumber int `default:"1000" yaml:"session_number" json:"session_number,omitempty"`

	// app
	FailFastTimeout string `default:"5s" yaml:"fail_fast_timeout" json:"fail_fast_timeout,omitempty"`

	// session tcp parameters
	GettySessionParam GettySessionParam `required:"true" yaml:"getty_session_param" json:"getty_session_param,omitempty"`
	// contains filtered or unexported fields
}

Config holds supported types by the multiconfig package

func (*ServerConfig) CheckValidity added in v0.9.3

func (c *ServerConfig) CheckValidity() error

type ServiceIDType added in v0.9.3

type ServiceIDType int16

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL