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))
}
}

浙公网安备 33010602011771号