golang 实现并发的websocket

2021-02-03 05:15

阅读:657

标签:model   公司   功能   for   close   pre   select   return   highlight   

公司要求使用golang做识别系统的web后端,我采用gin框架开发,其中部分功能使用了websocket实现前后端的实时消息推送刷新。

记录一下golang中使用channel和锁将websocket封装成为可并发读写的websocket:

package 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 = 

当然websocket支持发送和接收的消息多种,像我的话常用的是Json 如:

conn.WsConn.WriteJSON(data) //data可以是struct,map等

golang 实现并发的websocket

标签:model   公司   功能   for   close   pre   select   return   highlight   

原文地址:https://www.cnblogs.com/cfc-blog/p/13160857.html


评论


亲,登录后才可以留言!