package main import ( "io" "io/ioutil" "sync" "github.com/gorilla/websocket" ) type Pool struct { conns *sync.Map //map[string]*websocket.Conn } func NewPool() *Pool { return &Pool{ conns: &sync.Map{}, //map[string]*websocket.Conn{}, } } func (p *Pool) Broadcast(mt int, r io.Reader) error { b, err := ioutil.ReadAll(r) if err != nil { return err } n := 1000000 cnt := 0 p.conns.Range(func(k, v interface{}) bool { k = k.(string) conn := v.(*websocket.Conn) cnt += 1 w, err := conn.NextWriter(mt) if err != nil { p.conns.Delete(k) return true } defer w.Close() m, err := w.Write(b) if err != nil { p.conns.Delete(k) return true } if m < n { n = m } return true }) return nil }