From d3a1624880de10debace0568a3ed072a1c3a7b66 Mon Sep 17 00:00:00 2001 From: fiatjaf Date: Sat, 25 Mar 2023 14:59:35 -0300 Subject: [PATCH] ping every 29 seconds. fixes https://github.com/nbd-wtf/go-nostr/issues/72 --- relay.go | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/relay.go b/relay.go index 60c5e56..0ce5a3c 100644 --- a/relay.go +++ b/relay.go @@ -100,6 +100,23 @@ func (r *Relay) Connect(ctx context.Context) error { conn := NewConnection(socket) r.Connection = conn + // ping every 29 seconds + ticker := time.NewTicker(29 * time.Second) + defer ticker.Stop() + go func() { + for { + select { + case <-ticker.C: + err := conn.socket.WriteMessage(websocket.PingMessage, nil) + if err != nil { + log.Printf("error writing ping: %v; closing websocket", err) + return + } + } + } + }() + + // handling received messages go func() { for { typ, message, err := conn.socket.ReadMessage()