- 有的时候我们会用到websocks来处理一些即时的Web事物,比如像聊天室之类,Go语言的websocks运用起来还是很简单的,有一个现成的包gobwas,本文化繁为简,砍掉绝大部分高阶用法,中间也填了几个不算很深的坑,此代码复制粘贴后可运行。
package mainimport ("fmt""github.com/gobwas/ws" //Websocks工具"github.com/gobwas/ws/wsutil""net""net/http"
)var conn net.Conn //全局connfunc main() {var httpSrv *http.ServerhttpSrv = &http.Server{Addr: ":8082"}http.HandleFunc("/", wss)httpSrv.ListenAndServe()
}func startWsServer(w http.ResponseWriter, r *http.Request) net.Conn {conn, _, _, _ = ws.UpgradeHTTP(r, w)return conn
}func wss(w http.ResponseWriter, r *http.Request) {if conn != nil {fmt.Println("old conn killed:", conn)conn.Close()}
//此处不能直接初始化conn,而是需要用一个函数来初始化conn,否则数据交换太快了会卡顿,原因未知conn := startWsServer(w, r) fmt.Println("new conn creative:", conn)for {msg_receive, _, _ := wsutil.ReadClientData(conn)str_receive := string(msg_receive)if str_receive != "" {fmt.Println("msg_receive: ", str_receive) //接收到客户端的内容if str_receive == "123" { //如果客户端发来"123",则回传"Hello World!"sm("Hello World!")}}}
}func sm(cmds string) {var msg_send []byte = []byte(cmds)wsutil.WriteServerMessage(conn, ws.OpText, msg_send)
}