Documentation ¶
Index ¶
- Constants
- func DateTime() string
- func Now() time.Time
- func NowString() string
- func StartClock()
- func StopClock()
- func WallClock() *datetime.Clock
- type Endpoint
- type EndpointFlag
- type EndpointMap
- func (e *EndpointMap) Add(node NodeID, endpoint Endpoint)
- func (e *EndpointMap) Delete(node NodeID) bool
- func (e *EndpointMap) Get(node NodeID) Endpoint
- func (e *EndpointMap) List() []Endpoint
- func (e *EndpointMap) Range(f func(Endpoint) bool)
- func (e *EndpointMap) Reset()
- func (e *EndpointMap) Size() int
- type IPacket
- type MessageEndpoint
- type NodeID
- type NodeIDSet
- type PacketFlag
- type PacketHandler
- type PacketType
- type Service
- type ServiceContext
- func (c *ServiceContext) Close()
- func (c *ServiceContext) InboundQueue() chan<- IPacket
- func (c *ServiceContext) InitRegistrar(hostAddr, namespace string) error
- func (c *ServiceContext) Instance() Service
- func (c *ServiceContext) MessageQueue() <-chan IPacket
- func (c *ServiceContext) Registrar() *discovery.Client
- func (c *ServiceContext) RunID() string
- func (c *ServiceContext) Send(pkt IPacket)
- func (c *ServiceContext) WaitDone() <-chan struct{}
- type State
Constants ¶
View Source
const ( SERVICE_ALL = 0xFF // 所有服务 INSTANCE_ALL = 0xFFFF // 所有实例 )
View Source
const ( NodeServiceShift = 16 NodeTypeShift = 31 NodeServiceMask = 0x00FF0000 NodeInstanceMask = 0x0000FFFF )
View Source
const ( StateInit = 0 StateRunning = 1 StateShutdown = 2 StateTerminated = 3 )
View Source
const ClockEpoch int64 = 1577836800 // 2020-01-01 00:00:00 UTC
epoch of clock
View Source
const VERSION = "0.1.19"
版本号
Variables ¶
This section is empty.
Functions ¶
Types ¶
type Endpoint ¶
type Endpoint interface { MessageEndpoint // 原始连接对象 RawConn() net.Conn // 发送/接收计数数据 Stats() *stats.Stats // 开启read/write线程 Go(EndpointFlag) // 设置加解密 SetEncryptPair(cipher.BlockCryptor, cipher.BlockCryptor) }
网络端点
type EndpointFlag ¶
type EndpointFlag uint32
开启reader/writer标记
const ( EndpointReader EndpointFlag = 0x01 // 只开启reader EndpointWriter EndpointFlag = 0x02 // 只开启writer EndpointReadWriter EndpointFlag = 0x03 // 开启reader和writer )
type EndpointMap ¶
线程安全的endpoint map
func NewEndpointMap ¶
func NewEndpointMap() *EndpointMap
func (*EndpointMap) Size ¶
func (e *EndpointMap) Size() int
type IPacket ¶
type IPacket interface { // 消息命令(ID) Command() int32 SetCommand(int32) // session序列号 Seq() uint16 SetSeq(uint16) // 消息类型 Type() PacketType SetType(PacketType) // 消息标记 Flag() PacketFlag SetFlag(PacketFlag) // 消息错误码 Errno() int32 SetErrno(ec int32) // 节点ID Node() NodeID SetNode(NodeID) // 引用节点 Refers() []NodeID SetRefers([]NodeID) AddRefers(...NodeID) // 绑定的endpoint Endpoint() MessageEndpoint SetEndpoint(MessageEndpoint) // clone一个packet Clone() IPacket // 消息body,仅支持int64/float64/string/bytes/proto.Message类型 Body() interface{} SetBody(v interface{}) // body类型转换 BodyToInt() int64 BodyToFloat() float64 BodyToString() string BodyToBytes() []byte // 自动解码为pb消息 Decode() error // 解码body到`msg`里 DecodeTo(msg proto.Message) error // 响应ack消息 ReplyWith(command int32, body interface{}) error Reply(ack proto.Message) error // 响应错误码 RefuseWith(command, errno int32) error Refuse(errno int32) error }
定义应用层消息接口
type MessageEndpoint ¶
type MessageEndpoint interface { // 节点ID NodeID() NodeID SetNodeID(NodeID) // 远端地址 RemoteAddr() string // 发送消息 SendPacket(IPacket) error // 关闭读/写 Close() error ForceClose(error) IsClosing() bool // 绑定自定义数据 SetUserData(interface{}) UserData() interface{} }
绑定到消息上的endpoint
type NodeID ¶
type NodeID uint32
节点ID 一个32位整数表示的节点号,用以标识一个service(最高位为0),或者一个客户端session(最高位为1) 如果是服务编号:8位服务编号,16位服务实例编号
服务实例二进制布局 -------------------------------------- | reserved | service | instance | -------------------------------------- 32 24 16 0
type PacketFlag ¶
type PacketFlag uint8
消息标志位
const ( PFlagCompressed PacketFlag = 0x01 // 压缩 PFlagEncrypted PacketFlag = 0x02 // 加密 PFlagError PacketFlag = 0x10 // 错误标记 PFlagRpc PacketFlag = 0x20 // RPC标记 )
type PacketType ¶
type PacketType int8
消息编码类型
const ( PTypePacket PacketType = 0 // 应用消息 PTypeRoute PacketType = 1 // 路由消息 PTypeMulticast PacketType = 2 // 组播消息 )
type Service ¶
type Service interface { Type() uint8 Name() string NodeID() NodeID SetNodeID(id NodeID) Context() *ServiceContext Init(*ServiceContext) error Startup(context.Context) error }
应用层服务
type ServiceContext ¶
type ServiceContext struct {
// contains filtered or unexported fields
}
服务的上下文
func NewServiceContext ¶
func NewServiceContext(srv Service, queueSize int) *ServiceContext
func (*ServiceContext) InboundQueue ¶ added in v0.1.6
func (c *ServiceContext) InboundQueue() chan<- IPacket
消息队列,仅接收
func (*ServiceContext) InitRegistrar ¶ added in v0.1.5
func (c *ServiceContext) InitRegistrar(hostAddr, namespace string) error
初始化registrar
func (*ServiceContext) Instance ¶ added in v0.1.2
func (c *ServiceContext) Instance() Service
service实例
func (*ServiceContext) MessageQueue ¶
func (c *ServiceContext) MessageQueue() <-chan IPacket
消息队列,仅消费
func (*ServiceContext) Registrar ¶ added in v0.1.5
func (c *ServiceContext) Registrar() *discovery.Client
服务注册器
func (*ServiceContext) Send ¶ added in v0.1.5
func (c *ServiceContext) Send(pkt IPacket)
投递一条消息到context
func (*ServiceContext) WaitDone ¶ added in v0.1.2
func (c *ServiceContext) WaitDone() <-chan struct{}
等待close完成
type State ¶ added in v0.1.19
type State int32
service state
func (State) IsShuttingDown ¶ added in v0.1.19
func (State) IsTerminated ¶ added in v0.1.19
Source Files ¶
Click to show internal directories.
Click to hide internal directories.