在慕课网学习了GO实现websocket消息推送,这边记录一下
依赖包:
go get github.com/gorilla/websocket
然后是一个connection包
package impl
import (
"errors"
"github.com/gorilla/websocket"
"sync"
)
type Connecttion struct {
wsConn *websocket.Conn
inChan chan []byte
outChan chan []byte
closeChan chan byte
isClosed bool
mutex sync.RWMutex
}
func InitConnection(wsConn *websocket.Conn) (conn *Connecttion, err error) {
conn = &Connecttion{
wsConn: wsConn,
inChan: make(chan []byte, 1000),
outChan: make(chan []byte, 1000),
closeChan: make(chan byte, 1),
}
//启动读携程
go conn.readLoop()
//启动写携程
go conn.writeLoop()
return
}
//APi
func (conn *Connecttion) ReadMessage() (data []byte, err error) {
select {
case data = <-conn.inChan:
case <-conn.closeChan:
err = errors.New("connection is closed")
}
return
}
func (conn *Connecttion) Wri