我正在尝试使用 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 连接。我刚刚对此进行了测试,没有它它可以正常工作
- 1 回答
- 0 关注
- 227 浏览
添加回答
举报
0/150
提交
取消