Documentation ¶
Index ¶
- Variables
- type Conn
- type ContextKind
- type DispatchCtx
- func (ctx *DispatchCtx) BufferPop() *rony.MessageEnvelope
- func (ctx *DispatchCtx) BufferPush(m *rony.MessageEnvelope)
- func (ctx *DispatchCtx) BufferSize() int32
- func (ctx *DispatchCtx) Conn() Conn
- func (ctx *DispatchCtx) Debug()
- func (ctx *DispatchCtx) FillEnvelope(requestID uint64, constructor int64, payload []byte, auth []byte, ...)
- func (ctx *DispatchCtx) Get(key string) interface{}
- func (ctx *DispatchCtx) GetBool(key string) bool
- func (ctx *DispatchCtx) GetBytes(key string, defaultValue []byte) []byte
- func (ctx *DispatchCtx) GetInt64(key string, defaultValue int64) int64
- func (ctx *DispatchCtx) GetString(key string, defaultValue string) string
- func (ctx *DispatchCtx) Kind() ContextKind
- func (ctx *DispatchCtx) ServerID() string
- func (ctx *DispatchCtx) Set(key string, v interface{})
- func (ctx *DispatchCtx) StreamID() int64
- func (ctx *DispatchCtx) UnmarshalEnvelope(data []byte) error
- type Dispatcher
- type DummyGatewayConfig
- type GossipClusterConfig
- type Handler
- type Option
- type RequestCtx
- func (ctx *RequestCtx) Cluster() cluster.Cluster
- func (ctx *RequestCtx) Conn() Conn
- func (ctx *RequestCtx) ConnID() uint64
- func (ctx *RequestCtx) ExecuteRemote(replicaSet uint64, onlyLeader bool, req, res *rony.MessageEnvelope) error
- func (ctx *RequestCtx) Get(key string) interface{}
- func (ctx *RequestCtx) GetBool(key string) bool
- func (ctx *RequestCtx) GetBytes(key string, defaultValue []byte) []byte
- func (ctx *RequestCtx) GetInt64(key string, defaultValue int64) int64
- func (ctx *RequestCtx) GetString(key string, defaultValue string) string
- func (ctx *RequestCtx) Kind() ContextKind
- func (ctx *RequestCtx) PushCustomError(code, item string, enTxt string, enItems []string, localTxt string, ...)
- func (ctx *RequestCtx) PushCustomMessage(requestID uint64, constructor int64, proto proto.Message, ...)
- func (ctx *RequestCtx) PushError(code, item string)
- func (ctx *RequestCtx) PushMessage(constructor int64, proto proto.Message)
- func (ctx *RequestCtx) PushRedirectLeader()
- func (ctx *RequestCtx) PushRedirectRequest(replicaSet uint64)
- func (ctx *RequestCtx) PushRedirectSession(replicaSet uint64, wait time.Duration)
- func (ctx *RequestCtx) ReqID() uint64
- func (ctx *RequestCtx) Return()
- func (ctx *RequestCtx) ServerID() string
- func (ctx *RequestCtx) Set(key string, v interface{})
- func (ctx *RequestCtx) StopExecution()
- func (ctx *RequestCtx) Stopped() bool
- type Server
- func (edge *Server) AppendHandlers(constructor int64, handlers ...Handler)
- func (edge *Server) ClusterMembers() []cluster.Member
- func (edge *Server) GetGatewayConn(connID uint64) rony.Conn
- func (edge *Server) GetServerID() string
- func (edge *Server) JoinCluster(addr ...string) (int, error)
- func (edge *Server) PrependHandlers(constructor int64, handlers ...Handler)
- func (edge *Server) SetHandlers(constructor int64, leaderOnly bool, handlers ...Handler)
- func (edge *Server) SetPostHandlers(handlers ...Handler)
- func (edge *Server) SetPreHandlers(handlers ...Handler)
- func (edge *Server) Shutdown()
- func (edge *Server) ShutdownWithSignal(signals ...os.Signal)
- func (edge *Server) Start()
- func (edge *Server) StartCluster() (err error)
- func (edge *Server) StartGateway() error
- func (edge *Server) StartTunnel() error
- func (edge *Server) Stats() *Stats
- type Stats
- type TcpGatewayConfig
- type UdpTunnelConfig
Constants ¶
This section is empty.
Variables ¶
var ( ErrClusterNotSet = errors.New("cluster is not set") ErrGatewayNotSet = errors.New("gateway is not set") ErrTunnelNotSet = errors.New("tunnel is not set") ErrUnexpectedTunnelResponse = errors.New("unexpected tunnel response") ErrEmptyMemberList = errors.New("member list is empty") ErrMemberNotFound = errors.New("member not found") ErrNoTunnelAddrs = errors.New("tunnel address does not found") )
Functions ¶
This section is empty.
Types ¶
type Conn ¶ added in v0.1.8
type Conn interface { ConnID() uint64 ClientIP() string SendBinary(streamID int64, data []byte) error Persistent() bool Get(key string) interface{} Set(key string, val interface{}) }
Conn defines the Connection interface
type ContextKind ¶ added in v0.1.4
type ContextKind byte
const ( GatewayMessage ContextKind ReplicaMessage TunnelMessage )
func (ContextKind) String ¶ added in v0.1.9
func (c ContextKind) String() string
type DispatchCtx ¶
type DispatchCtx struct {
// contains filtered or unexported fields
}
DispatchCtx
func (*DispatchCtx) BufferPop ¶ added in v0.1.9
func (ctx *DispatchCtx) BufferPop() *rony.MessageEnvelope
func (*DispatchCtx) BufferPush ¶ added in v0.1.9
func (ctx *DispatchCtx) BufferPush(m *rony.MessageEnvelope)
func (*DispatchCtx) BufferSize ¶ added in v0.1.9
func (ctx *DispatchCtx) BufferSize() int32
func (*DispatchCtx) Conn ¶
func (ctx *DispatchCtx) Conn() Conn
func (*DispatchCtx) Debug ¶
func (ctx *DispatchCtx) Debug()
func (*DispatchCtx) FillEnvelope ¶
func (*DispatchCtx) Get ¶
func (ctx *DispatchCtx) Get(key string) interface{}
func (*DispatchCtx) GetBool ¶
func (ctx *DispatchCtx) GetBool(key string) bool
func (*DispatchCtx) GetBytes ¶
func (ctx *DispatchCtx) GetBytes(key string, defaultValue []byte) []byte
func (*DispatchCtx) GetInt64 ¶
func (ctx *DispatchCtx) GetInt64(key string, defaultValue int64) int64
func (*DispatchCtx) GetString ¶
func (ctx *DispatchCtx) GetString(key string, defaultValue string) string
func (*DispatchCtx) Kind ¶ added in v0.1.4
func (ctx *DispatchCtx) Kind() ContextKind
func (*DispatchCtx) ServerID ¶ added in v0.1.9
func (ctx *DispatchCtx) ServerID() string
func (*DispatchCtx) Set ¶
func (ctx *DispatchCtx) Set(key string, v interface{})
func (*DispatchCtx) StreamID ¶
func (ctx *DispatchCtx) StreamID() int64
func (*DispatchCtx) UnmarshalEnvelope ¶
func (ctx *DispatchCtx) UnmarshalEnvelope(data []byte) error
type Dispatcher ¶
type Dispatcher interface { // All the input arguments are valid in the function context, if you need to pass 'envelope' to other // async functions, make sure to hard copy (clone) it before sending it. OnMessage(ctx *DispatchCtx, envelope *rony.MessageEnvelope) // All the input arguments are valid in the function context, if you need to pass 'data' or 'envelope' to other // async functions, make sure to hard copy (clone) it before sending it. If 'err' is not nil then envelope will be // discarded, it is the user's responsibility to send back appropriate message using 'conn' // Note that conn IS NOT nil in any circumstances. Interceptor(ctx *DispatchCtx, data []byte) (err error) // This will be called when the context has been finished, this lets cleaning up, or in case you need to flush the // messages and updates in one go. Done(ctx *DispatchCtx) // This will be called when a new connection has been opened OnOpen(conn rony.Conn, kvs ...*rony.KeyValue) // This will be called when a connection is closed OnClose(conn rony.Conn) }
Dispatcher
type DummyGatewayConfig ¶ added in v0.1.8
type DummyGatewayConfig dummyGateway.Config
type GossipClusterConfig ¶ added in v0.1.8
type GossipClusterConfig gossipCluster.Config
type Handler ¶
type Handler func(ctx *RequestCtx, in *rony.MessageEnvelope)
type Option ¶
type Option func(edge *Server)
Option
func WithDispatcher ¶ added in v0.1.9
func WithDispatcher(d Dispatcher) Option
WithDispatcher enables custom dispatcher to write your specific event handlers.
func WithGossipCluster ¶ added in v0.1.5
func WithGossipCluster(cfg GossipClusterConfig) Option
WithGossipCluster enables the cluster in gossip mode. This mod is eventually consistent mode but there is no need to a central key-value store or any other 3rd party service to run the cluster
func WithTcpGateway ¶
func WithTcpGateway(config TcpGatewayConfig) Option
WithTcpGateway set the gateway to tcp which can support http and/or websocket Only one gateway could be set and if you set another gateway it panics on runtime.
func WithTestGateway ¶
func WithTestGateway(config DummyGatewayConfig) Option
WithTestGateway set the gateway to a dummy gateway which is useful for writing tests. Only one gateway could be set and if you set another gateway it panics on runtime.
func WithUdpTunnel ¶ added in v0.1.8
func WithUdpTunnel(config UdpTunnelConfig) Option
WithUdpTunnel set the tunnel to a udp based tunnel which provides communication channel between edge servers.
type RequestCtx ¶
type RequestCtx struct {
// contains filtered or unexported fields
}
RequestCtx
func (*RequestCtx) Cluster ¶ added in v0.2.10
func (ctx *RequestCtx) Cluster() cluster.Cluster
func (*RequestCtx) Conn ¶
func (ctx *RequestCtx) Conn() Conn
func (*RequestCtx) ConnID ¶
func (ctx *RequestCtx) ConnID() uint64
func (*RequestCtx) ExecuteRemote ¶ added in v0.1.9
func (ctx *RequestCtx) ExecuteRemote(replicaSet uint64, onlyLeader bool, req, res *rony.MessageEnvelope) error
func (*RequestCtx) Get ¶
func (ctx *RequestCtx) Get(key string) interface{}
func (*RequestCtx) GetBool ¶
func (ctx *RequestCtx) GetBool(key string) bool
func (*RequestCtx) GetBytes ¶
func (ctx *RequestCtx) GetBytes(key string, defaultValue []byte) []byte
func (*RequestCtx) GetString ¶
func (ctx *RequestCtx) GetString(key string, defaultValue string) string
func (*RequestCtx) Kind ¶ added in v0.1.4
func (ctx *RequestCtx) Kind() ContextKind
func (*RequestCtx) PushCustomError ¶
func (*RequestCtx) PushCustomMessage ¶
func (*RequestCtx) PushError ¶
func (ctx *RequestCtx) PushError(code, item string)
func (*RequestCtx) PushMessage ¶
func (ctx *RequestCtx) PushMessage(constructor int64, proto proto.Message)
func (*RequestCtx) PushRedirectLeader ¶
func (ctx *RequestCtx) PushRedirectLeader()
func (*RequestCtx) PushRedirectRequest ¶ added in v0.2.10
func (ctx *RequestCtx) PushRedirectRequest(replicaSet uint64)
func (*RequestCtx) PushRedirectSession ¶ added in v0.2.10
func (ctx *RequestCtx) PushRedirectSession(replicaSet uint64, wait time.Duration)
func (*RequestCtx) ReqID ¶
func (ctx *RequestCtx) ReqID() uint64
func (*RequestCtx) Return ¶
func (ctx *RequestCtx) Return()
func (*RequestCtx) ServerID ¶ added in v0.1.4
func (ctx *RequestCtx) ServerID() string
func (*RequestCtx) Set ¶
func (ctx *RequestCtx) Set(key string, v interface{})
func (*RequestCtx) StopExecution ¶
func (ctx *RequestCtx) StopExecution()
func (*RequestCtx) Stopped ¶
func (ctx *RequestCtx) Stopped() bool
type Server ¶
type Server struct {
// contains filtered or unexported fields
}
Server
func (*Server) AppendHandlers ¶
AppendHandlers appends the handlers for the constructor in order. So handlers[n] will be called before handlers[n+1].
func (*Server) ClusterMembers ¶
ClusterMembers returns a list of all the discovered nodes in the cluster
func (*Server) GetGatewayConn ¶ added in v0.0.6
GetGatewayConn return the gateway connection identified by connID or returns nil if not found.
func (*Server) GetServerID ¶
GetServerID return this server id, which MUST be unique in the cluster otherwise the behaviour is unknown.
func (*Server) JoinCluster ¶
JoinCluster is used to take an existing Cluster and attempt to join a cluster by contacting all the given hosts and performing a state sync. This returns the number of hosts successfully contacted and an error if none could be reached. If an error is returned, the node did not successfully join the cluster.
func (*Server) PrependHandlers ¶
PrependHandlers prepends the handlers for the constructor in order.
func (*Server) SetHandlers ¶
SetHandlers set the handlers for the constructor. 'leaderOnly' is applicable ONLY if the cluster is run with Raft support. If cluster is a Raft enabled cluster, then by setting 'leaderOnly' to TRUE, requests sent to a follower server will return redirect error to the client. For standalone servers 'leaderOnly' does not affect.
func (*Server) SetPostHandlers ¶ added in v0.0.5
SetPreHandlers set the handler which will be called after executing any request. These pre handlers are like middlewares which will be automatically triggered for each request. If you want to set post handler for specific request the your must use SetHandlers, PrependHandlers or AppendHandlers
func (*Server) SetPreHandlers ¶ added in v0.0.5
SetPreHandlers set the handler which will be called before executing any request. These pre handlers are like middlewares which will be automatically triggered for each request. If you want to set pre handler for specific request the your must use SetHandlers, PrependHandlers or AppendHandlers
func (*Server) ShutdownWithSignal ¶
Shutdown blocks until any of the signals has been called
func (*Server) Start ¶ added in v0.1.9
func (edge *Server) Start()
Start is a helper function which tries to start all three parts of the edge server This function does not return any error, if you need to make sure all the parts are started with no error, then you must start each section separately.
func (*Server) StartCluster ¶
StartCluster is non-blocking function which runs the gossip and raft if it is set
func (*Server) StartGateway ¶
StartGateway is non-blocking function runs the gateway in background so we can accept clients requests
func (*Server) StartTunnel ¶ added in v0.1.9
StartTunnel is non-blocking function runs the gateway in background so we can accept other servers requests
type Stats ¶
type Stats struct { Address string RaftMembers int RaftState string ReplicaSet uint64 Members int MembershipScore int GatewayProtocol gateway.Protocol GatewayAddr []string }
Stats exports some internal metrics data
type TcpGatewayConfig ¶ added in v0.1.8
type TcpGatewayConfig tcpGateway.Config