Go websocket

server:

package main

import (
	"fmt"
	"github.com/gogf/gf/encoding/gbinary"
	"github.com/gogf/gf/frame/g"
	"github.com/gogf/gf/net/ghttp"
	"github.com/gogf/gf/os/gfile"
	"github.com/gogf/gf/os/glog"
)

func main() {
	s := g.Server()
	s.BindHandler("/ws", func(r *ghttp.Request) {
		ws, err := r.WebSocket()
		if err != nil {
			glog.Error(err)
			r.Exit()
		}
		for {
			msgType, msg, err := ws.ReadMessage()
			if err != nil {
				return
			}
			if err = ws.WriteMessage(msgType, msg); err != nil {
				return
			}

			fmt.Println(gbinary.DecodeToString(msg))
		}
	})
	s.SetServerRoot(gfile.MainPkgPath())
	s.SetPort(9501)
	s.Run()
}

  

client:

package main

import (
	"crypto/tls"
	"fmt"
	"github.com/gogf/gf/encoding/gbinary"
	"github.com/gogf/gf/net/ghttp"
	"github.com/gorilla/websocket"
	"net/http"
	"time"
)

func main() {
	client := ghttp.NewWebSocketClient()
	client.HandshakeTimeout = time.Second    // 设置超时时间
	client.Proxy = http.ProxyFromEnvironment // 设置代理
	client.TLSClientConfig = &tls.Config{}   // 设置 tls 配置

	conn, _, err := client.Dial("ws://127.0.0.1:9501/ws", nil)
	if err != nil {
		panic(err)
	}
	defer func(conn *websocket.Conn) {
		err := conn.Close()
		if err != nil {

		}
	}(conn)

	for i := 0; i < 100000; i++ {
		err = conn.WriteMessage(websocket.TextMessage, []byte("hello word"))
		if err != nil {
			panic(err)
		}

		mt, data, err := conn.ReadMessage()
		if err != nil {
			panic(err)
		}
		fmt.Println(i,mt, gbinary.DecodeToString(data))
	}
}

  

 

posted @ 2022-03-28 06:45  lobtao  阅读(76)  评论(0)    收藏  举报