为了账号安全,请及时绑定邮箱和手机立即绑定

如何从 Golang 中的服务器发送 websocket

如何从 Golang 中的服务器发送 websocket

Go
慕哥9229398 2022-05-10 17:12:26
我正在尝试使用 Go 构建一个 websocket 应用程序,其中用户输入任何字符串,websocket 将字符串显示回客户端(浏览器)。但我需要另一个可以向 websocket 发送消息并在浏览器中显示的 api (POST)。我试图从类似的案例中学习,例如如何将消息从 golang 的 websocket 服务器主动发送到客户端,但仍然无法将其关闭。请帮我。服务器(main.go)package mainimport (    "fmt"    "io/ioutil"    "net/http"    "github.com/gorilla/websocket")type msg struct {    Input string}func main() {    http.HandleFunc("/ws", wsHandler)    http.HandleFunc("/", rootHandler)    panic(http.ListenAndServe(":8080", nil))}func rootHandler(w http.ResponseWriter, r *http.Request) {    content, err := ioutil.ReadFile("index.html")    if err != nil {        fmt.Println("Could not open file.", err)    }    fmt.Fprintf(w, "%s", content)}func wsHandler(w http.ResponseWriter, r *http.Request) {    if r.Header.Get("Origin") != "http://"+r.Host {        http.Error(w, "Origin not allowed", 403)        return    }    conn, err := websocket.Upgrade(w, r, w.Header(), 1024, 1024)    if err != nil {        http.Error(w, "Could not open websocket connection", http.StatusBadRequest)    }    go echo(conn)}func echo(conn *websocket.Conn) {    for {        m := msg{}        err := conn.ReadJSON(&m)        if err != nil {            fmt.Println("Error reading json.", err)        }        fmt.Printf("Got message: %#v\n", m)        if err = conn.WriteJSON(m); err != nil {            fmt.Println(err)        }    }}
查看完整描述

1 回答

?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

删除 echo 函数前面的“go”,无需将其作为 goroutine 运行。当你这样做时,它会立即关闭你的 Websocket 连接。我刚刚对此进行了测试,没有它它可以正常工作



查看完整回答
反对 回复 2022-05-10
  • 1 回答
  • 0 关注
  • 227 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信