refactor: cross 包服务器 id 更改为 string 类型
This commit is contained in:
parent
ba2f3af398
commit
9e339065d4
|
@ -6,10 +6,10 @@ type Cross interface {
|
||||||
// - serverId: 本服id
|
// - serverId: 本服id
|
||||||
// - packetHandle.serverId: 发送跨服消息的服务器id
|
// - packetHandle.serverId: 发送跨服消息的服务器id
|
||||||
// - packetHandle.packet: 数据包
|
// - packetHandle.packet: 数据包
|
||||||
Init(server *Server, packetHandle func(serverId int64, packet []byte)) error
|
Init(server *Server, packetHandle func(serverId string, packet []byte)) error
|
||||||
// PushMessage 推送跨服消息
|
// PushMessage 推送跨服消息
|
||||||
// - serverId: 目标服务器id
|
// - serverId: 目标服务器id
|
||||||
PushMessage(serverId int64, packet []byte) error
|
PushMessage(serverId string, packet []byte) error
|
||||||
// Release 释放资源
|
// Release 释放资源
|
||||||
Release()
|
Release()
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,6 @@ package cross
|
||||||
|
|
||||||
// Message 跨服消息数据结构
|
// Message 跨服消息数据结构
|
||||||
type Message struct {
|
type Message struct {
|
||||||
ServerId int64 `json:"server_id"`
|
ServerId string `json:"server_id"`
|
||||||
Packet []byte `json:"packet"`
|
Packet []byte `json:"packet"`
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,7 +22,7 @@ func NewNats(url string, options ...NatsOption) *Nats {
|
||||||
messagePool: concurrent.NewPool[*Message](1024*100, func() *Message {
|
messagePool: concurrent.NewPool[*Message](1024*100, func() *Message {
|
||||||
return new(Message)
|
return new(Message)
|
||||||
}, func(data *Message) {
|
}, func(data *Message) {
|
||||||
data.ServerId = 0
|
data.ServerId = ""
|
||||||
data.Packet = nil
|
data.Packet = nil
|
||||||
}),
|
}),
|
||||||
}
|
}
|
||||||
|
@ -41,7 +41,7 @@ type Nats struct {
|
||||||
messagePool *concurrent.Pool[*Message]
|
messagePool *concurrent.Pool[*Message]
|
||||||
}
|
}
|
||||||
|
|
||||||
func (slf *Nats) Init(server *server.Server, packetHandle func(serverId int64, packet []byte)) (err error) {
|
func (slf *Nats) Init(server *server.Server, packetHandle func(serverId string, packet []byte)) (err error) {
|
||||||
if slf.conn == nil {
|
if slf.conn == nil {
|
||||||
if len(slf.options) == 0 {
|
if len(slf.options) == 0 {
|
||||||
slf.options = append(slf.options,
|
slf.options = append(slf.options,
|
||||||
|
@ -72,7 +72,7 @@ func (slf *Nats) Init(server *server.Server, packetHandle func(serverId int64, p
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (slf *Nats) PushMessage(serverId int64, packet []byte) error {
|
func (slf *Nats) PushMessage(serverId string, packet []byte) error {
|
||||||
message := slf.messagePool.Get()
|
message := slf.messagePool.Get()
|
||||||
defer slf.messagePool.Release(message)
|
defer slf.messagePool.Release(message)
|
||||||
message.ServerId = serverId
|
message.ServerId = serverId
|
||||||
|
|
|
@ -19,7 +19,7 @@ type StopEventHandle func(srv *Server)
|
||||||
type ConnectionReceivePacketEventHandle func(srv *Server, conn *Conn, packet []byte)
|
type ConnectionReceivePacketEventHandle func(srv *Server, conn *Conn, packet []byte)
|
||||||
type ConnectionOpenedEventHandle func(srv *Server, conn *Conn)
|
type ConnectionOpenedEventHandle func(srv *Server, conn *Conn)
|
||||||
type ConnectionClosedEventHandle func(srv *Server, conn *Conn, err any)
|
type ConnectionClosedEventHandle func(srv *Server, conn *Conn, err any)
|
||||||
type ReceiveCrossPacketEventHandle func(srv *Server, senderServerId int64, packet []byte)
|
type ReceiveCrossPacketEventHandle func(srv *Server, senderServerId string, packet []byte)
|
||||||
type MessageErrorEventHandle func(srv *Server, message *Message, err error)
|
type MessageErrorEventHandle func(srv *Server, message *Message, err error)
|
||||||
type MessageLowExecEventHandle func(srv *Server, message *Message, cost time.Duration)
|
type MessageLowExecEventHandle func(srv *Server, message *Message, cost time.Duration)
|
||||||
type ConsoleCommandEventHandle func(srv *Server)
|
type ConsoleCommandEventHandle func(srv *Server)
|
||||||
|
@ -239,7 +239,7 @@ func (slf *event) RegReceiveCrossPacketEvent(handle ReceiveCrossPacketEventHandl
|
||||||
log.Info("Server", log.String("RegEvent", runtimes.CurrentRunningFuncName()), log.String("handle", reflect.TypeOf(handle).String()))
|
log.Info("Server", log.String("RegEvent", runtimes.CurrentRunningFuncName()), log.String("handle", reflect.TypeOf(handle).String()))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (slf *event) OnReceiveCrossPacketEvent(serverId int64, packet []byte) {
|
func (slf *event) OnReceiveCrossPacketEvent(serverId string, packet []byte) {
|
||||||
slf.receiveCrossPacketEventHandles.RangeValue(func(index int, value ReceiveCrossPacketEventHandle) bool {
|
slf.receiveCrossPacketEventHandles.RangeValue(func(index int, value ReceiveCrossPacketEventHandle) bool {
|
||||||
value(slf.Server, serverId, packet)
|
value(slf.Server, serverId, packet)
|
||||||
return true
|
return true
|
||||||
|
|
|
@ -154,14 +154,14 @@ func PushErrorMessage(srv *Server, err error, action MessageErrorAction, mark ..
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetCrossMessageAttrs 获取消息中的跨服属性
|
// GetCrossMessageAttrs 获取消息中的跨服属性
|
||||||
func (slf *Message) GetCrossMessageAttrs() (serverId int64, packet []byte) {
|
func (slf *Message) GetCrossMessageAttrs() (serverId string, packet []byte) {
|
||||||
serverId = slf.attrs[0].(int64)
|
serverId = slf.attrs[0].(string)
|
||||||
packet = slf.attrs[1].([]byte)
|
packet = slf.attrs[1].([]byte)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// PushCrossMessage 向特定服务器中推送 MessageTypeCross 消息
|
// PushCrossMessage 向特定服务器中推送 MessageTypeCross 消息
|
||||||
func PushCrossMessage(srv *Server, crossName string, serverId int64, packet []byte, mark ...any) {
|
func PushCrossMessage(srv *Server, crossName string, serverId string, packet []byte, mark ...any) {
|
||||||
if serverId == srv.id {
|
if serverId == srv.id {
|
||||||
msg := srv.messagePool.Get()
|
msg := srv.messagePool.Get()
|
||||||
msg.t = MessageTypeCross
|
msg.t = MessageTypeCross
|
||||||
|
|
|
@ -31,7 +31,7 @@ type option struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
type runtime struct {
|
type runtime struct {
|
||||||
id int64 // 服务器id
|
id string // 服务器id
|
||||||
cross map[string]Cross // 跨服
|
cross map[string]Cross // 跨服
|
||||||
deadlockDetect time.Duration // 是否开启死锁检测
|
deadlockDetect time.Duration // 是否开启死锁检测
|
||||||
supportMessageTypes map[int]bool // websocket模式下支持的消息类型
|
supportMessageTypes map[int]bool // websocket模式下支持的消息类型
|
||||||
|
@ -134,7 +134,7 @@ func WithTicker(size int, autonomy bool) Option {
|
||||||
// WithCross 通过跨服的方式创建服务器
|
// WithCross 通过跨服的方式创建服务器
|
||||||
// - 推送跨服消息时,将推送到对应 crossName 的跨服中间件中,crossName 可以满足不同功能采用不同的跨服/消息中间件
|
// - 推送跨服消息时,将推送到对应 crossName 的跨服中间件中,crossName 可以满足不同功能采用不同的跨服/消息中间件
|
||||||
// - 通常情况下 crossName 仅需一个即可
|
// - 通常情况下 crossName 仅需一个即可
|
||||||
func WithCross(crossName string, serverId int64, cross Cross) Option {
|
func WithCross(crossName string, serverId string, cross Cross) Option {
|
||||||
return func(srv *Server) {
|
return func(srv *Server) {
|
||||||
start:
|
start:
|
||||||
{
|
{
|
||||||
|
@ -143,18 +143,18 @@ func WithCross(crossName string, serverId int64, cross Cross) Option {
|
||||||
srv.cross = map[string]Cross{}
|
srv.cross = map[string]Cross{}
|
||||||
}
|
}
|
||||||
srv.cross[crossName] = cross
|
srv.cross[crossName] = cross
|
||||||
err := cross.Init(srv, func(serverId int64, packet []byte) {
|
err := cross.Init(srv, func(serverId string, packet []byte) {
|
||||||
msg := srv.messagePool.Get()
|
msg := srv.messagePool.Get()
|
||||||
msg.t = MessageTypeCross
|
msg.t = MessageTypeCross
|
||||||
msg.attrs = []any{serverId, packet}
|
msg.attrs = []any{serverId, packet}
|
||||||
srv.pushMessage(msg)
|
srv.pushMessage(msg)
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Info("Cross", log.Int64("ServerID", serverId), log.String("Cross", reflect.TypeOf(cross).String()), log.String("State", "WaitNatsRun"))
|
log.Info("Cross", log.String("ServerID", serverId), log.String("Cross", reflect.TypeOf(cross).String()), log.String("State", "WaitNatsRun"))
|
||||||
time.Sleep(1 * time.Second)
|
time.Sleep(1 * time.Second)
|
||||||
goto start
|
goto start
|
||||||
}
|
}
|
||||||
log.Info("Cross", log.Int64("ServerID", serverId), log.String("Cross", reflect.TypeOf(cross).String()))
|
log.Info("Cross", log.String("ServerID", serverId), log.String("Cross", reflect.TypeOf(cross).String()))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -440,7 +440,7 @@ func (slf *Server) CloseConn(id string) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetID 获取服务器id
|
// GetID 获取服务器id
|
||||||
func (slf *Server) GetID() int64 {
|
func (slf *Server) GetID() string {
|
||||||
if slf.cross == nil {
|
if slf.cross == nil {
|
||||||
panic(ErrNoSupportCross)
|
panic(ErrNoSupportCross)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue