我正在尝试使用 Go 构建一个 websocket 应用程序,其中用户输入任何字符串,websocket 将字符串显示回客户端(浏览器)。
但我需要另一个可以向 websocket 发送消息并在浏览器中显示的 api (POST)。我试图从类似的案例中学习,例如如何将消息从 golang 的 websocket 服务器主动发送到客户端,但仍然无法将其关闭。
请帮我。
服务器(main.go)
package main
import (
"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)
}
}
}
肥皂起泡泡
相关分类