- 有的時(shí)候我們會(huì)用到websocks來處理一些即時(shí)的Web事物狭园,比如像聊天室之類,Go語言的websocks運(yùn)用起來還是很簡(jiǎn)單的尘分,有一個(gè)現(xiàn)成的包gobwas猜惋,本文化繁為簡(jiǎn),砍掉絕大部分高階用法培愁,中間也填了幾個(gè)不算很深的坑著摔,此代碼復(fù)制粘貼后可運(yùn)行。
package main
import (
"fmt"
"github.com/gobwas/ws" //Websocks工具
"github.com/gobwas/ws/wsutil"
"net"
"net/http"
)
var conn net.Conn //全局conn
func main() {
var httpSrv *http.Server
httpSrv = &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定续,而是需要用一個(gè)函數(shù)來初始化conn谍咆,否則數(shù)據(jù)交換太快了會(huì)卡頓禾锤,原因未知
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) //接收到客戶端的內(nèi)容
if str_receive == "123" { //如果客戶端發(fā)來"123",則回傳"Hello World!"
sm("Hello World!")
}
}
}
}
func sm(cmds string) {
var msg_send []byte = []byte(cmds)
wsutil.WriteServerMessage(conn, ws.OpText, msg_send)
}
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者