MCPcopy Create free account
hub / github.com/LockGit/gochat / writePump

Method writePump

connect/server.go:51–88  ·  view source on GitHub ↗
(ch *Channel, c *Connect)

Source from the content-addressed store, hash-verified

49}
50
51func (s *Server) writePump(ch *Channel, c *Connect) {
52 //PingPeriod default eq 54s
53 ticker := time.NewTicker(s.Options.PingPeriod)
54 defer func() {
55 ticker.Stop()
56 ch.conn.Close()
57 }()
58
59 for {
60 select {
61 case message, ok := <-ch.broadcast:
62 //write data dead time , like http timeout , default 10s
63 ch.conn.SetWriteDeadline(time.Now().Add(s.Options.WriteWait))
64 if !ok {
65 logrus.Warn("SetWriteDeadline not ok")
66 ch.conn.WriteMessage(websocket.CloseMessage, []byte{})
67 return
68 }
69 w, err := ch.conn.NextWriter(websocket.TextMessage)
70 if err != nil {
71 logrus.Warn(" ch.conn.NextWriter err :%s ", err.Error())
72 return
73 }
74 logrus.Infof("message write body:%s", message.Body)
75 w.Write(message.Body)
76 if err := w.Close(); err != nil {
77 return
78 }
79 case <-ticker.C:
80 //heartbeat,if ping error will exit and close current websocket conn
81 ch.conn.SetWriteDeadline(time.Now().Add(s.Options.WriteWait))
82 logrus.Infof("websocket.PingMessage :%v", websocket.PingMessage)
83 if err := ch.conn.WriteMessage(websocket.PingMessage, nil); err != nil {
84 return
85 }
86 }
87 }
88}
89
90func (s *Server) readPump(ch *Channel, c *Connect) {
91 defer func() {

Callers 1

serveWsMethod · 0.80

Calls 1

AddMethod · 0.80

Tested by

no test coverage detected