我是Golang的新手,正在尝试使用网络套接字将数据发送到页面。我有一个处理程序,我希望能够提供文件,并在呈现文件后向其发送消息。这是我现在拥有的一些代码。

package main

import (
    "github.com/gorilla/websocket"
    "log"
    "fmt"
    "net/http"
)

var upgrader = websocket.Upgrader{
    ReadBufferSize:  1024,
    WriteBufferSize: 1024,
}

func serveRoot(w http.ResponseWriter, r *http.Request) {
    http.ServeFile(w, r, "views/index.html")
    _, err := upgrader.Upgrade(w, r, nil)
    if err != nil {
        log.Println(err)
        return
    }
}

func main() {
    http.HandleFunc("/", serveRoot)
    fmt.Println("Started")
    if err := http.ListenAndServe(":9090", nil); err != nil {
        log.Fatal("ListenAndServe:", err)
    }
}

问题是使用gorilla库我不知道如何发送数据,并且在加载页面时得到了一些输出。
2018/01/23 08:35:24 http: multiple response.WriteHeader calls
2018/01/23 08:35:24 websocket: the client is not using the websocket protocol: 'upgrade' token not found in 'Connection' header
2018/01/23 08:35:24 http: multiple response.WriteHeader calls
2018/01/23 08:35:24 websocket: 'Origin' header value not allowed

目的:在页面渲染后发送一些数据,然后(稍后)将其连接到stdin / stderr 免责声明:我只是在学习编码,因此如果您可以将其考虑在内并且不要太含糊,那将是一个很大的帮助。

最佳答案

因此,正如所提到的一些评论一样,您无法升级已通过html提供的连接。实现此目的的简单方法是为websocket提供一个端点,为html提供一个端点。

因此,在您的示例中,您可以这样做:
http.HandleFunc("/", serveHtml)http.HandleFunc("/somethingElse", serveWebsocket)
serveHtml具有http.ServeFile调用,而serveWebsocket具有升级和wotnot。

关于go - 在Golang中呈现网页后,如何发送Websocket数据?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48406751/

10-14 16:00
查看更多