refactor: cross 包服务器 id 更改为 string 类型
This commit is contained in:
parent
ba2f3af398
commit
9e339065d4
|
@ -6,10 +6,10 @@ type Cross interface {
|
|||
// - serverId: 本服id
|
||||
// - packetHandle.serverId: 发送跨服消息的服务器id
|
||||
// - packetHandle.packet: 数据包
|
||||
Init(server *Server, packetHandle func(serverId int64, packet []byte)) error
|
||||
Init(server *Server, packetHandle func(serverId string, packet []byte)) error
|
||||
// PushMessage 推送跨服消息
|
||||
// - serverId: 目标服务器id
|
||||
PushMessage(serverId int64, packet []byte) error
|
||||
PushMessage(serverId string, packet []byte) error
|
||||
// Release 释放资源
|
||||
Release()
|
||||
}
|
||||
|
|
|
@ -2,6 +2,6 @@ package cross
|
|||
|
||||
// Message 跨服消息数据结构
|
||||
type Message struct {
|
||||
ServerId int64 `json:"server_id"`
|
||||
ServerId string `json:"server_id"`
|
||||
Packet []byte `json:"packet"`
|
||||
}
|
||||
|
|
|
@ -22,7 +22,7 @@ func NewNats(url string, options ...NatsOption) *Nats {
|
|||
messagePool: concurrent.NewPool[*Message](1024*100, func() *Message {
|
||||
return new(Message)
|
||||
}, func(data *Message) {
|
||||
data.ServerId = 0
|
||||
data.ServerId = ""
|
||||
data.Packet = nil
|
||||
}),
|
||||
}
|
||||
|
@ -41,7 +41,7 @@ type Nats struct {
|
|||
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 len(slf.options) == 0 {
|
||||
slf.options = append(slf.options,
|
||||
|
@ -72,7 +72,7 @@ func (slf *Nats) Init(server *server.Server, packetHandle func(serverId int64, p
|
|||
return err
|
||||
}
|
||||
|
||||
func (slf *Nats) PushMessage(serverId int64, packet []byte) error {
|
||||
func (slf *Nats) PushMessage(serverId string, packet []byte) error {
|
||||
message := slf.messagePool.Get()
|
||||
defer slf.messagePool.Release(message)
|
||||
message.ServerId = serverId
|
||||
|
|
|
@ -19,7 +19,7 @@ type StopEventHandle func(srv *Server)
|
|||
type ConnectionReceivePacketEventHandle func(srv *Server, conn *Conn, packet []byte)
|
||||
type ConnectionOpenedEventHandle func(srv *Server, conn *Conn)
|
||||
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 MessageLowExecEventHandle func(srv *Server, message *Message, cost time.Duration)
|
||||
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()))
|
||||
}
|
||||
|
||||
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 {
|
||||
value(slf.Server, serverId, packet)
|
||||
return true
|
||||
|
|
|
@ -154,14 +154,14 @@ func PushErrorMessage(srv *Server, err error, action MessageErrorAction, mark ..
|
|||
}
|
||||
|
||||
// GetCrossMessageAttrs 获取消息中的跨服属性
|
||||
func (slf *Message) GetCrossMessageAttrs() (serverId int64, packet []byte) {
|
||||
serverId = slf.attrs[0].(int64)
|
||||
func (slf *Message) GetCrossMessageAttrs() (serverId string, packet []byte) {
|
||||
serverId = slf.attrs[0].(string)
|
||||
packet = slf.attrs[1].([]byte)
|
||||
return
|
||||
}
|
||||
|
||||
// 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 {
|
||||
msg := srv.messagePool.Get()
|
||||
msg.t = MessageTypeCross
|
||||
|
|
|
@ -31,7 +31,7 @@ type option struct {
|
|||
}
|
||||
|
||||
type runtime struct {
|
||||
id int64 // 服务器id
|
||||
id string // 服务器id
|
||||
cross map[string]Cross // 跨服
|
||||
deadlockDetect time.Duration // 是否开启死锁检测
|
||||
supportMessageTypes map[int]bool // websocket模式下支持的消息类型
|
||||
|
@ -134,7 +134,7 @@ func WithTicker(size int, autonomy bool) Option {
|
|||
// WithCross 通过跨服的方式创建服务器
|
||||
// - 推送跨服消息时,将推送到对应 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) {
|
||||
start:
|
||||
{
|
||||
|
@ -143,18 +143,18 @@ func WithCross(crossName string, serverId int64, cross Cross) Option {
|
|||
srv.cross = map[string]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.t = MessageTypeCross
|
||||
msg.attrs = []any{serverId, packet}
|
||||
srv.pushMessage(msg)
|
||||
})
|
||||
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)
|
||||
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
|
||||
func (slf *Server) GetID() int64 {
|
||||
func (slf *Server) GetID() string {
|
||||
if slf.cross == nil {
|
||||
panic(ErrNoSupportCross)
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue