Golang WebSocket连接

oaxa6hgo  于 2023-04-06  发布在  Go
关注(0)|答案(2)|浏览(105)

我开始学习Golang。我有一个项目,我需要通过WebSocket连接从API流一些数据,并在控制台中打印出来。
我不明白的是-我有一个URL,所以我可以在它上发出请求(通过net/http包),但我如何才能将它升级到WebSocket?
我可以只使用纯Golang吗?我在互联网上找不到合适的信息。所有的例子都使用JS,或者它们使它变得太复杂(比如构建一些应用程序,我不想这样做,因为它的复杂性,我根本无法跟随)。

zvms9eto

zvms9eto1#

我明白了。WebSocket有客户端和服务器端。大多数时候人们需要在浏览器中运行客户端。大猩猩的WebSocket实现支持客户端和服务器端。你可以用它来拨号你的服务器。这里是一个示例代码。

package main

import (
    "fmt"
    "github.com/gorilla/websocket"
)

func main() {
    ws, _, err := websocket.DefaultDialer.Dial("ws[s]://localhost/path?query", nil)
    if err != nil {
        panic(err)
    }
    defer ws.Close()

    for {
        // Read a message from websocket connection
        _, msg, err := ws.ReadMessage()
        if err != nil {
             return
        }

        fmt.Println(string(msg))

        // uncomment below if you need send message to remote server
        //if err = ws.WriteMessage(websocket.TextMessage, msg); err != nil {
        //  return
        //}
    }
}

下面是完成的简单客户端和服务器示例:https://github.com/gorilla/websocket/tree/master/examples/echo

0h4hbjxa

0h4hbjxa2#

使用go WebSocket就像javascript一样:

package main

import (
    "fmt"
    "github.com/lxzan/gws"
    "log"
)

func main() {
    socket, _, err := gws.NewClient(new(WebSocket), &gws.ClientOption{
        Addr: "ws://127.0.0.1:3000/connect",
    })
    if err != nil {
        log.Printf(err.Error())
        return
    }
    socket.Listen()
}

type WebSocket struct {
    gws.BuiltinEventHandler
}

func (c *WebSocket) OnMessage(socket *gws.Conn, message *gws.Message) {
    fmt.Printf("recv: %s\n", message.Data.String())
}

相关问题