golang 实现并发的websocket
2021-02-03 05:15
标签:model 公司 功能 for close pre select return highlight 公司要求使用golang做识别系统的web后端,我采用gin框架开发,其中部分功能使用了websocket实现前后端的实时消息推送刷新。 记录一下golang中使用channel和锁将websocket封装成为可并发读写的websocket: 当然websocket支持发送和接收的消息多种,像我的话常用的是Json 如: golang 实现并发的websocket 标签:model 公司 功能 for close pre select return highlight 原文地址:https://www.cnblogs.com/cfc-blog/p/13160857.htmlpackage cws
import (
"errors"
"github.com/gorilla/websocket"
"sync"
)
//封装websocket并发读写操作
type Connection struct {
WsConn *websocket.Conn
InChan chan []byte
OutChan chan models.BayDataS
CloseChan chan byte
Mutex sync.Mutex
IsClosed bool
}
func InitConnection(wsConn *websocket.Conn) (conn *Connection, err error) {
conn = &Connection{
WsConn: wsConn,
InChan: make(chan []byte, 1000),
OutChan: make(chan []byte, 1000),
CloseChan: make(chan byte, 1),
}
//读协程
go conn.ReadLoop()
//写协程
go conn.WriteLoop()
return
}
func (conn *Connection) ReadMess() (data []byte, err error) {
select {
case data =
conn.WsConn.WriteJSON(data) //data可以是struct,map等
文章标题:golang 实现并发的websocket
文章链接:http://soscw.com/index.php/essay/50271.html