Last active
October 10, 2022 14:06
-
-
Save otakijae/5fe0f2bcff794622695ecd8dde231a49 to your computer and use it in GitHub Desktop.
send http2 ping frame
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
func (w *HttpBo)Ping(network, address string) error { | |
if transport, ok := w.Client.Transport.(*http2.Transport); !ok { | |
return errors.New("Getting HTTP2 Client Transport failed") | |
} else { | |
ctx, cancel := context.WithCancel(context.Background()) | |
defer cancel() | |
conn, err := tls.Dial(network, address, &tls.Config{NextProtos: []string{http2.NextProtoTLS}}) | |
if err != nil { | |
return err | |
} | |
cc, err := transport.NewClientConn(conn) | |
if err != nil { | |
return err | |
} | |
if err := cc.Ping(ctx); err != nil { | |
return err | |
} else if err := cc.Shutdown(ctx); err != nil { | |
return err | |
} | |
} | |
return nil | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
polling
long polling
web socket
http2
downchannel 구성 & 연결 유지 http2 ping
시간 지나면 끊어짐. 계속 유지해야하는 경우 http2 ping check 필요
handshake GET & access token 으로 수행
클라이언트가 CIC와 최초 연결 시 수행되어야 하는 작업은 downchannel을 구성하는 것입니다. Downchannel은 CIC로부터 지시 메시지를 받을 때 사용됩니다. 이때, 전달받는 지시 메시지는 클라이언트의 이벤트 메시지에 대한 응답으로 전달되는 지시 메시지가 아닌 특정 조건이나 필요에 의해 CIC가 주도(Cloud-initiated)하여 클라이언트에 보내는 지시 메시지입니다. 예를 들면, 새로운 알림(push)이 도착했다면 downchannel을 통해 지시 메시지가 전달될 것입니다.
Downchannel 연결이 종료되거나 끊어지면 클라이언트는 즉시 새로운 downchannel을 구성하여, CIC로부터 전달되는 지시 메시지를 받지 못하는 일이 없도록 해야합니다.
CIC와 연결이 유지되고 있는지 파악하기 위해 클라이언트는 1 분 간격으로 HTTP/2 PING 프레임을 CIC로 전송해야 합니다. CIC로부터 HTTP/2 PING ACK 응답을 받지 못하면 클라이언트는 즉시 새로운 연결을 구성해 클라이언트와 CIC간의 연결이 지속될 수 있도록 해야합니다. HTTP/2 PING 프레임에 대한 자세한 설명은 HTTP/2 PING Payload Format을 참조합니다.
multipart message 음성 파일 전송/수신 (push)
클라이언트는 Content-Type을 multipart/form-data로 설정하고 첫 번째 메시지 파트에는 이벤트 메시지 정보가 담긴 JSON 데이터를 두 번째 메시지 파트에는 사용자의 음성이 담긴 바이너리 데이터를 담아서 보낼 수 있습니다.