WebSocket 연결을 활성 상태로 유지하려면 주기적인 데이터 교환이 필요합니다. WebSocket 프로토콜의 일부로 연결 하트비트를 유지하기 위해 핑퐁 메커니즘이 사용됩니다. 이렇게 하면 클라이언트와 서버 모두 일관되게 데이터를 보내고 받을 수 있어 연결 시간이 초과되는 것을 방지할 수 있습니다.
Code.google.com/p/go.net/ websocket은 기본적으로 핑퐁 프로토콜을 지원하지 않습니다. 따라서 연결을 유지하기 위한 맞춤형 솔루션을 구현하는 것이 필요합니다.
간단하고 효과적인 솔루션은 서버에서 클라이언트로 주기적으로 ping 메시지를 보내는 것입니다. . 이러한 핑 메시지는 클라이언트로부터 퐁 응답을 트리거하여 연결이 살아 있음을 나타냅니다. 지정된 제한 시간 내에 퐁 응답이 수신되지 않으면 서버는 연결을 끊을 수 있습니다.
다음은 code.google.com/p/go.net/을 사용하여 이 메커니즘을 구현하기 위한 드롭인 솔루션입니다. websocket:
func keepAlive(c *websocket.Conn, timeout time.Duration) { lastResponse := time.Now() c.SetPongHandler(func(msg string) error { lastResponse = time.Now() return nil }) go func() { for { err := c.WriteMessage(websocket.PingMessage, []byte("keepalive")) if err != nil { return } time.Sleep(timeout / 2) if (time.Since(lastResponse) > timeout) { c.Close() return } } }() }
이 솔루션을 구현하면 정기적인 데이터 교환이 없더라도 활성 WebSocket 연결을 유지할 수 있습니다.
위 내용은 Go.net/websocket을 사용하여 WebSocket 연결을 유지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!