mirror of
https://github.com/duanhf2012/origin.git
synced 2026-03-06 22:27:36 +08:00
优化读写锁
This commit is contained in:
@@ -60,7 +60,7 @@ type WebsocketServer struct {
|
|||||||
wsUri string
|
wsUri string
|
||||||
maxClientid uint64 //记录当前最新clientid
|
maxClientid uint64 //记录当前最新clientid
|
||||||
mapClient map[uint64]*WSClient
|
mapClient map[uint64]*WSClient
|
||||||
locker sync.Mutex
|
locker sync.RWMutex
|
||||||
|
|
||||||
port uint16
|
port uint16
|
||||||
|
|
||||||
@@ -174,9 +174,34 @@ func (slf *WebsocketServer) Start() {
|
|||||||
go slf.startListen()
|
go slf.startListen()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (slf *WebsocketServer) Clients() []uint64 {
|
||||||
|
slf.locker.RLock()
|
||||||
|
defer slf.locker.RUnlock()
|
||||||
|
r := make([]uint64, 0, len(slf.mapClient))
|
||||||
|
for i, _ := range slf.mapClient {
|
||||||
|
r = append(r, i)
|
||||||
|
}
|
||||||
|
return r
|
||||||
|
}
|
||||||
|
|
||||||
|
func (slf *WebsocketServer) BroadcastMsg(messageType int, msg []byte) int {
|
||||||
|
slf.locker.RLock()
|
||||||
|
defer slf.locker.RUnlock()
|
||||||
|
err := 0
|
||||||
|
wsMsg := WSMessage{messageType, msg}
|
||||||
|
for _, value := range slf.mapClient {
|
||||||
|
if len(value.bwritemsg) >= MAX_MSG_COUNT {
|
||||||
|
service.GetLogger().Printf(sysmodule.LEVER_ERROR, "message chan is full :%d\n", len(value.bwritemsg))
|
||||||
|
err++
|
||||||
|
}
|
||||||
|
value.bwritemsg <- wsMsg
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
func (slf *WebsocketServer) SendMsg(clientid uint64, messageType int, msg []byte) bool {
|
func (slf *WebsocketServer) SendMsg(clientid uint64, messageType int, msg []byte) bool {
|
||||||
slf.locker.Lock()
|
slf.locker.RLock()
|
||||||
defer slf.locker.Unlock()
|
defer slf.locker.RUnlock()
|
||||||
value, ok := slf.mapClient[clientid]
|
value, ok := slf.mapClient[clientid]
|
||||||
if ok == false {
|
if ok == false {
|
||||||
return false
|
return false
|
||||||
|
|||||||
Reference in New Issue
Block a user