2014-05-12 2 views
1

클라이언트 웹 소켓 연결을 wsList에 저장하고 응답을 균일하게 보내려고합니다. "닫힌 네트워크 연결 사용"을 반환합니다. 그것을 고치는 방법?GO에서 웹 소켓 연결을 저장하는 방법

import { 
    "code.google.com/p/go.net/websocket" 
    ... 
} 

var wsList []*websocket.Conn 

func WShandler(ws *websocket.Conn) { 
    wsList = append(wsList, ws) 
    go sendmsg() 
} 

func sendmsg() { 
    for _, conn := range wsList { 
     if err := websocket.JSON.Send(conn, outmsg); err != nil { 
      fmt.Printf("%s", err) //"use of closed network connection" 
     } 
    } 
} 
+0

어떤 'websocket' 패키지를 사용하고 있습니까? – thwd

+0

'''code.google.com/p/go.net/websocket''' –

답변

1

당신은 단순히뿐만 아니라 닫습니다 강요, 다른 쪽 끝이 의지를 닫을 수 있습니다 또는 네트워크 중단이 발생할 수 있기 때문에 무기한 영업을하는 모든 연결을지지 않습니다.

읽거나 닫힌 연결을 작성하려고

는 오류

"use of closed network connection" 

당신은 닫힌 연결을 폐기해야을 얻을.

+0

을 사용하고 있지만'''sendmsg'''에 연결이 생기지 않았습니다.'''''WShandler ()'''반환, 연결이 닫혀 있습니까? –

+0

WShandler가 연결을 닫을 수있는 모든 호출, 예 – thwd

+0

그렇다면 일부 데이터를 보낼 때마다 어떻게 클라이언트 연결 목록을 유지 관리 할 수 ​​있습니까? –

2

연결 wsWsHandler이 반환 될 때 닫힙니다. 이 문제를 해결하려면 오류가 감지 될 때까지 루프에서 메시지를 읽어 반환에서 WsHandler을 방지 :

func WShandler(ws *websocket.Conn) { 
    wsList = append(wsList, ws) 
    go sendmsg() 
    for { 
    var s string 
    if err := websocket.Message.Receive(ws, &s); err != nil { 
     break 
    } 
    } 
    // remove ws from wsList here 
} 

이 wsList에 경주가있다. 뮤텍스로 보호하십시오.

관련 문제