美文网首页
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