go - 在 Golang 中渲染页面后如何发送 websocket 数据?

标签 go websocket stdout stderr gorilla


我是 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 的连接。执行此操作的简单方法是为您的 websockets 设置一个端点,为您的 html 设置一个端点。

因此在您的示例中,您可能会这样做:

http.HandleFunc("/", serveHtml) http.HandleFunc("/somethingElse", serveWebsocket)

serveHtml 有你的 http.ServeFile 调用,而 serveWebsocket 有升级和 wotnot。

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

相关文章:

python - 解码通过 websocket 发送的数据

c# - 无法从 cmd 获取输出

java - 使用 JSch 和 Java 捕获服务器命令输出

go - 如何在无错误的情况下按键编写互斥锁?

json - 在 Go 中,为什么我的 JSON 解码在这里不起作用?

reactjs - 如何忽略通过 HTTP 进行更改的客户端的 websocket 事件?

c#-4.0 - 在 Microsoft 堆栈上使用 Comet/XMPP 与 WebSocket 技术的实时 Web 通知和更新选项?

c++ - cout流的限制?

file - 在 go 中逐字节处理文件

elasticsearch - 如何在 elasticsearch 中只存储有限数量的文档。