美文网首页
2021-07-12 Golang 史上最简单的Websocks

2021-07-12 Golang 史上最简单的Websocks

作者: Rockage | 来源:发表于2021-07-12 19:40 被阅读0次
    • 有的时候我们会用到websocks来处理一些即时的Web事物,比如像聊天室之类,Go语言的websocks运用起来还是很简单的,有一个现成的包gobwas,本文化繁为简,砍掉绝大部分高阶用法,中间也填了几个不算很深的坑,此代码复制粘贴后可运行。
    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,而是需要用一个函数来初始化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)
    }
    

    相关文章

      网友评论

          本文标题:2021-07-12 Golang 史上最简单的Websocks

          本文链接:https://www.haomeiwen.com/subject/qgddpltx.html