code.google.com/p/go.net/websocket을 사용하여 구축된 WebSocket 서버에서 클라이언트는 서버로부터 알림을 받을 수 있습니다. . 그러나 장기간의 비활성으로 인해 발생하는 시간 초과 메커니즘으로 인해 클라이언트-서버 연결이 조기에 종료될 수 있습니다.
이 문제를 해결하기 위해 WebSocket 프로토콜에는 "핑퐁" 하트비트 메커니즘이 포함되어 있습니다. 이 메커니즘을 사용하면 클라이언트와 서버가 서로 연결 유지 메시지를 보내 연결이 끊어지는 것을 방지할 수 있습니다.
안타깝게도 code.google.com/p/go.net/websocket 패키지는 그렇지 않습니다. 기본적으로 이 핑퐁 프로토콜을 지원합니다. 해결 방법으로 다음과 같은 사용자 정의 핑퐁 핸들러를 구현할 수 있습니다.
import ( "time" "github.com/gorilla/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에서 WebSocket 연결을 유지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!