프로세스 종료 안되는 문제 수정
This commit is contained in:
@ -52,6 +52,7 @@ type commandType string
|
|||||||
const (
|
const (
|
||||||
commandType_EnterRoom = commandType("enter_room")
|
commandType_EnterRoom = commandType("enter_room")
|
||||||
commandType_LeaveRoom = commandType("leave_room")
|
commandType_LeaveRoom = commandType("leave_room")
|
||||||
|
ForceShutdownCloseMessage = "force_shutdown"
|
||||||
)
|
)
|
||||||
|
|
||||||
type commandMessage struct {
|
type commandMessage struct {
|
||||||
@ -302,6 +303,7 @@ func (ws *WebsocketHandler) mainLoop(ctx context.Context) {
|
|||||||
logger.Println(r)
|
logger.Println(r)
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
c.closeMessage = ForceShutdownCloseMessage
|
||||||
ws.ClientDisconnected(c)
|
ws.ClientDisconnected(c)
|
||||||
c.Close()
|
c.Close()
|
||||||
}
|
}
|
||||||
@ -495,6 +497,11 @@ func upgrade_core(ws *WebsocketHandler, conn *websocket.Conn, accid primitive.Ob
|
|||||||
|
|
||||||
ws.connWaitGroup.Add(1)
|
ws.connWaitGroup.Add(1)
|
||||||
go func(c *wsconn, accid primitive.ObjectID, deliveryChan chan<- any) {
|
go func(c *wsconn, accid primitive.ObjectID, deliveryChan chan<- any) {
|
||||||
|
defer func() {
|
||||||
|
recover()
|
||||||
|
ws.connWaitGroup.Done()
|
||||||
|
}()
|
||||||
|
|
||||||
for {
|
for {
|
||||||
messageType, r, err := c.NextReader()
|
messageType, r, err := c.NextReader()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -519,10 +526,10 @@ func upgrade_core(ws *WebsocketHandler, conn *websocket.Conn, accid primitive.Ob
|
|||||||
ws.Call(newconn.sender, string(cmd), r)
|
ws.Call(newconn.sender, string(cmd), r)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ws.connWaitGroup.Done()
|
|
||||||
|
|
||||||
c.Conn = nil
|
c.Conn = nil
|
||||||
|
if c.closeMessage != ForceShutdownCloseMessage {
|
||||||
ws.connInOutChan <- c
|
ws.connInOutChan <- c
|
||||||
|
}
|
||||||
}(newconn, accid, ws.deliveryChan)
|
}(newconn, accid, ws.deliveryChan)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user