• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
思念以南
博客园    首页    新随笔    联系   管理    订阅  订阅

websocketClient

package binance

import (
	"fmt"
	"github.com/gorilla/websocket"
	"log"
	"net/url"
)

type websocketClientManager struct {
	conn        *websocket.Conn
	addr        *string
	path        string
	sendMsgChan chan string
	recvMsgChan chan string
	isAlive     bool
	timeout     int
}

// 构造函数
func NewWsClientManager(addrIp, addrPort, path string, timeout int) *websocketClientManager {
	addrString := addrIp + ":" + addrPort
	var sendChan = make(chan string, 10)
	var recvChan = make(chan string, 10)
	var conn *websocket.Conn
	return &websocketClientManager{
		addr:        &addrString,
		path:        path,
		conn:        conn,
		sendMsgChan: sendChan,
		recvMsgChan: recvChan,
		isAlive:     false,
		timeout:     timeout,
	}
}

// 链接服务端
func (wsc *websocketClientManager) dail() {
	var err error
	u := url.URL{Scheme: "wss", Host: *wsc.addr, Path: wsc.path}
	log.Printf("connecting to %s", u.String())
	wsc.conn, _, err = websocket.DefaultDialer.Dial(u.String(), nil)
	if err != nil {
		fmt.Println(err)
		return
		
	}
	wsc.isAlive = true
	log.Printf("connecting to %s 链接成功!!!", u.String())
	
}

// 发送消息
func (wsc *websocketClientManager) sendMsgThread() {
	go func() {
		for {
			msg := <-wsc.sendMsgChan
			err := wsc.conn.WriteMessage(websocket.TextMessage, []byte(msg))
			if err != nil {
				log.Println("write:", err)
				continue
			}
		}
	}()
}

// 读取消息
func (wsc *websocketClientManager) readMsgThread() {
	go func() {
		for {
			if wsc.conn != nil {
				_, message, err := wsc.conn.ReadMessage()
				if err != nil {
					log.Println("read:", err)
					wsc.isAlive = false
					// 出现错误,退出读取,尝试重连
					break
				}
				// wsc.recvMsgChan <- string(message)
				fmt.Println(string(message))
			}
			
		}
	}()
}

// 开启服务并重连
func (wsc *websocketClientManager) start() {
	if wsc.isAlive == false {
		wsc.dail()
		wsc.sendMsgThread()
		wsc.readMsgThread()
	}
	// time.Sleep(time.Second * time.Duration(wsc.timeout))
}

/*func ()  {

}*/
func init()  {
	// wss://stream.binance.com:9443/ws/filusdt@depth
	wsc := NewWsClientManager("stream.binance.com", "9443", "/ws", 10)
	wsc.start()
	wsc.sendMsgChan <- `{"method": "SUBSCRIBE","params": ["!ticker@arr"],"id": 312}`

}
/*	// wss://stream.binance.com:9443/ws/filusdt@depth
	wsc := NewWsClientManager("stream.binance.com", "9443", "/ws/filusdt@depth", 10)
	wsc.start()
	var w1 sync.WaitGroup
	w1.Add(1)
	w1.Wait()

 */
posted @ 2022-05-10 14:32  思念以南  阅读(208)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3