Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

536
Views
Websocket: Is it necessary to send ping messages by hand? (e.g between fiber websocket server & js client in browser)

I've wrtten a websocket server in fiber's websocket, and the client is js websocket in browser.

Some questions regarding ping/pong:

  1. Is there any default ping/pong msg between the websocket server & client?
    If yes, then why I can't see it in chrome's devtools.
  2. If there isn't any defult ping/pong msg, should I add ping/pong between server & client myself?
  3. If it's a good practice to add ping/pong msg myself, then:
  4. Is it better to send ping from client to server, or reverse?
  5. Since conn.ReadJSON() will block, does that means I should use conn.SetPingHandler() to specify a handler, or just use the default handler?
    In either case, the ping need to be sent from client to server I guess.

Sample ping from server (not sure is it proper)

I added a testing ping sent from fiber websocket server to js client, if needed:


        // ping
        // TODO: not sure is this needed ?
        // TODO: use goroutine pool ?
        if needPing {
            go func() {
                pingTicker := time.NewTicker(pingPeriod)
                defer func() {
                    pingTicker.Stop()
                }()
                time.Sleep(pingPeriod) // wait a while before start ping,
                for {
                    select {
                    case <-pingTicker.C:
                        conn.WriteControl(websocket.PingMessage, []byte("ping"), time.Now().Add(time.Second*5))
                        log.Debug("ping")
                    }
                }
            }()
        }

I also don't see any ping msg on client in chrome's devtools.

It's better to use for{ select } to handle both ping & normal msg I guess, but conn.ReadJSON() would block the goroutine, might need to create a channel for it? Didn't try yet.

BTW, any suggestion to the ping impl?

about 4 years ago · Juan Pablo Isaza
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!