如何从golang的websocket服务器主动向客户端发送消息

Bje*_*Zhu 5 go websocket

我是 golang 和 websocket 的新手。

我正在尝试编写一个 websocket 服务器,它可以在握手完成后主动向客户端发送消息。

但是我的服务器只会在收到来自客户端的请求时才将消息发送给客户端。

有谁知道如何实现这个功能,或者我在哪里可以找到相关的答案?

非常感谢。

源代码如下:

package main

import (
    "log"
    "net/http"
)

func handler(w http.ResponseWriter, req *http.Request) {
    w.Header().Set("Content-Type", "text/plain")
    w.Write([]byte("Hi, the handshake is completed.\n"))
    w.Write([]byte("Let's start to talk something.\n"))
}

func main() {
    http.HandleFunc("/", handler)
    log.Printf("Start to listen on 443.")
    err := http.ListenAndServeTLS(":443", "server.crt", "server.key", nil)
    log.Fatal(err)
}
Run Code Online (Sandbox Code Playgroud)

小智 2

尝试打包websocket

这是从Godoc获取的一个简单示例:

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

func handler(w http.ResponseWriter, r *http.Request) {
    conn, err := upgrader.Upgrade(w, r, nil)
    if err != nil {
        log.Println(err)
        return
    }
    defer conn.Close()

    msg := []byte("Let's start to talk something.")
    err = conn.WriteMessage(websocket.TextMessage, msg)
    if err != nil {
        log.Println(err)
    }

    // do other stuff...
}
Run Code Online (Sandbox Code Playgroud)