1 Star 0 Fork 0

余济舟/aid

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
rpc_server_pool.go 1.40 KB
一键复制 编辑 原始数据 按行查看 历史
余济舟 提交于 2025-09-03 11:02 +08:00 . optimize
package rpcServer
import (
"sync"
"gitee.com/jericho-yu/aid/dict"
)
type Pool struct {
pool *dict.AnyDict[string, *Server]
lock sync.RWMutex
err error
}
var (
poolOnce sync.Once
poolIns *Pool
)
func (*Pool) Once() *Pool {
poolOnce.Do(func() { poolIns = &Pool{pool: dict.Make[string, *Server]()} })
return poolIns
}
func (*Pool) Error() error { return poolIns.err }
func (*Pool) Set(name string, port string) (*Server, error) {
poolIns.lock.RLock()
defer poolIns.lock.RUnlock()
var rpcServer *Server
if rpcServer, poolIns.err = app.Server.New(port); poolIns.err != nil {
return nil, poolIns.err
}
poolIns.pool.Set(name, rpcServer)
return rpcServer, nil
}
func (*Pool) Get(key string) *Server {
poolIns.lock.RLock()
defer poolIns.lock.RUnlock()
if val, ok := poolIns.pool.Get(key); ok {
return val
}
return nil
}
func (*Pool) Close(key string) *Pool {
poolIns.lock.RLock()
defer poolIns.lock.RUnlock()
var rpcServer = poolIns.Get(key)
if rpcServer != nil {
if poolIns.err = rpcServer.Close(); poolIns.err != nil {
return poolIns
}
poolIns.pool.RemoveByKey(key)
}
return poolIns
}
func (*Pool) Clean() []error {
poolIns.lock.RLock()
defer poolIns.lock.RUnlock()
var errs []error
for key, rpcServer := range poolIns.pool.ToMap() {
if err := rpcServer.Close(); err != nil {
errs = append(errs, err)
continue
}
poolIns.pool.RemoveByKey(key)
}
return errs
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/jericho-yu/aid.git
git@gitee.com:jericho-yu/aid.git
jericho-yu
aid
aid
v1.36.4

搜索帮助