mirror of
https://github.com/duanhf2012/origin.git
synced 2026-02-24 06:34:42 +08:00
websocket服务器宕机关闭处理连接
This commit is contained in:
@@ -1,9 +1,11 @@
|
|||||||
package network
|
package network
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
|
"runtime/debug"
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@@ -90,6 +92,8 @@ func (slf *WebsocketServer) ReleaseClient(pclient *WSClient) {
|
|||||||
slf.locker.Lock()
|
slf.locker.Lock()
|
||||||
delete(slf.mapClient, pclient.clientid)
|
delete(slf.mapClient, pclient.clientid)
|
||||||
slf.locker.Unlock()
|
slf.locker.Unlock()
|
||||||
|
//关闭写管道
|
||||||
|
close(pclient.bwritemsg)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (slf *WebsocketServer) SetupReciver(pattern string, messageReciver IMessageReceiver, bEnableCompression bool) {
|
func (slf *WebsocketServer) SetupReciver(pattern string, messageReciver IMessageReceiver, bEnableCompression bool) {
|
||||||
@@ -127,8 +131,16 @@ func (slf *WebsocketServer) startListen() {
|
|||||||
|
|
||||||
func (slf *WSClient) startSendMsg() {
|
func (slf *WSClient) startSendMsg() {
|
||||||
for {
|
for {
|
||||||
msgbuf := <-slf.bwritemsg
|
msgbuf, ok := <-slf.bwritemsg
|
||||||
slf.conn.WriteMessage(msgbuf.msgtype, msgbuf.bwritemsg)
|
if ok == false {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
err := slf.conn.WriteMessage(msgbuf.msgtype, msgbuf.bwritemsg)
|
||||||
|
if err != nil {
|
||||||
|
service.GetLogger().Printf(sysmodule.LEVER_INFO, "write client id %d is error :%v\n", slf.clientid, err)
|
||||||
|
break
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -146,6 +158,7 @@ func (slf *WebsocketServer) SendMsg(clientid uint64, messageType int, msg []byte
|
|||||||
}
|
}
|
||||||
|
|
||||||
value.bwritemsg <- WSMessage{messageType, msg}
|
value.bwritemsg <- WSMessage{messageType, msg}
|
||||||
|
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -164,6 +177,23 @@ func (slf *WebsocketServer) Stop() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (slf *BaseMessageReciver) startReadMsg(pclient *WSClient) {
|
func (slf *BaseMessageReciver) startReadMsg(pclient *WSClient) {
|
||||||
|
defer func() {
|
||||||
|
if r := recover(); r != nil {
|
||||||
|
var coreInfo string
|
||||||
|
str, ok := r.(string)
|
||||||
|
if ok {
|
||||||
|
coreInfo = string(debug.Stack())
|
||||||
|
} else {
|
||||||
|
coreInfo = "Panic!"
|
||||||
|
}
|
||||||
|
|
||||||
|
coreInfo += "\n" + fmt.Sprintf("core information is %s\n", str)
|
||||||
|
service.GetLogger().Printf(service.LEVER_FATAL, coreInfo)
|
||||||
|
slf.messageReciver.OnDisconnect(pclient.clientid, errors.New("core dump"))
|
||||||
|
slf.WsServer.ReleaseClient(pclient)
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
for {
|
for {
|
||||||
msgtype, message, err := pclient.conn.ReadMessage()
|
msgtype, message, err := pclient.conn.ReadMessage()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
Reference in New Issue
Block a user