feat: server.Server 将记录在线的连接信息,可获取到在线连接和计数等

This commit is contained in:
kercylan98 2023-07-11 10:48:40 +08:00
parent 6962cf4989
commit 8368fe0770
2 changed files with 50 additions and 18 deletions

View File

@ -123,6 +123,7 @@ func (slf *event) OnConnectionClosedEvent(conn *Conn, err any) {
handle(slf.Server, conn, err)
}
conn.Close()
slf.Server.online.Delete(conn.GetID())
}
// RegConnectionOpenedEvent 在连接打开后将立刻执行被注册的事件处理函数
@ -135,6 +136,7 @@ func (slf *event) RegConnectionOpenedEvent(handle ConnectionOpenedEventHandle) {
}
func (slf *event) OnConnectionOpenedEvent(conn *Conn) {
slf.Server.online.Set(conn.GetID(), conn)
for _, handle := range slf.connectionOpenedEventHandles {
handle(slf.Server, conn)
}

View File

@ -33,6 +33,7 @@ func New(network Network, options ...Option) *Server {
runtime: &runtime{messagePoolSize: DefaultMessageBufferSize, messageChannelSize: DefaultMessageChannelSize},
option: &option{},
network: network,
online: synchronization.NewMap[string, *Conn](),
closeChannel: make(chan struct{}, 1),
systemSignal: make(chan os.Signal, 1),
}
@ -71,24 +72,25 @@ func New(network Network, options ...Option) *Server {
// Server 网络服务器
type Server struct {
*event // 事件
*runtime // 运行时
*option // 可选项
network Network // 网络类型
addr string // 侦听地址
systemSignal chan os.Signal // 系统信号
ginServer *gin.Engine // HTTP模式下的路由器
httpServer *http.Server // HTTP模式下的服务器
grpcServer *grpc.Server // GRPC模式下的服务器
gServer *gNet // TCP或UDP模式下的服务器
isRunning bool // 是否正在运行
isShutdown atomic.Bool // 是否已关闭
closeChannel chan struct{} // 关闭信号
ants *ants.Pool // 协程池
messagePool *synchronization.Pool[*Message] // 消息池
messageChannel chan *Message // 消息管道
multiple *MultipleServer // 多服务器模式下的服务器
multipleRuntimeErrorChan chan error // 多服务器模式下的运行时错误
*event // 事件
*runtime // 运行时
*option // 可选项
network Network // 网络类型
addr string // 侦听地址
systemSignal chan os.Signal // 系统信号
online *synchronization.Map[string, *Conn] // 在线连接
ginServer *gin.Engine // HTTP模式下的路由器
httpServer *http.Server // HTTP模式下的服务器
grpcServer *grpc.Server // GRPC模式下的服务器
gServer *gNet // TCP或UDP模式下的服务器
isRunning bool // 是否正在运行
isShutdown atomic.Bool // 是否已关闭
closeChannel chan struct{} // 关闭信号
ants *ants.Pool // 协程池
messagePool *synchronization.Pool[*Message] // 消息池
messageChannel chan *Message // 消息管道
multiple *MultipleServer // 多服务器模式下的服务器
multipleRuntimeErrorChan chan error // 多服务器模式下的运行时错误
}
// Run 使用特定地址运行服务器
@ -330,6 +332,33 @@ func (slf *Server) Run(addr string) error {
return nil
}
// GetOnlineCount 获取在线人数
func (slf *Server) GetOnlineCount() int {
return slf.online.Size()
}
// GetOnline 获取在线连接
func (slf *Server) GetOnline(id string) *Conn {
return slf.online.Get(id)
}
// GetOnlineAll 获取所有在线连接
func (slf *Server) GetOnlineAll() map[string]*Conn {
return slf.online.Map()
}
// IsOnline 是否在线
func (slf *Server) IsOnline(id string) bool {
return slf.online.Exist(id)
}
// CloseConn 关闭连接
func (slf *Server) CloseConn(id string) {
if conn, exist := slf.online.GetExist(id); exist {
conn.Close()
}
}
// IsProd 是否为生产模式
func (slf *Server) IsProd() bool {
return slf.prod
@ -425,6 +454,7 @@ func (slf *Server) shutdown(err error, stack ...string) {
}
}
// GRPCServer 当网络类型为 NetworkGRPC 时将被允许获取 grpc 服务器,否则将会发生 panic
func (slf *Server) GRPCServer() *grpc.Server {
if slf.grpcServer == nil {
panic(ErrNetworkOnlySupportGRPC)