Websockets через WebAssembly, сгенерированные golang? - PullRequest
2 голосов
/ 18 апреля 2019

Можно ли написать клиент Websocket в wasm over go?Я попытался использовать gorilla/websocket, но безуспешно:

func main() {
    ws := func(this js.Value, inputs []js.Value) interface{} {
        go func() {
            wsDial, r, err := websocket.DefaultDialer.Dial("ws://localhost:3000/ws", nil)
            fmt.Println(wsDial, r, err)
        }()
        return nil
    }

    js.Global().Set("ws", js.FuncOf(ws))

    select {}
}

Я получаю следующую ошибку при вызове ws():

dial tcp: Protocol not available

Ответы [ 2 ]

1 голос
/ 22 апреля 2019

Я решил это путем извлечения объекта WebSocket из глобального объекта JavaScript, который в моем случае равен window, потому что я запускаю его в браузере.Я использовал только библиотеку "syscall / js".Это выглядит так:

ws := js.Global().Get("WebSocket").New("ws://localhost:8080/ws")

ws.Call("addEventListener", "open", js.FuncOf(func(this js.Value, args []js.Value) interface{} {
    fmt.Println("open")

    ws.Call("send", js.TypedArrayOf([]byte{123}))
    return nil
}))
1 голос
/ 20 апреля 2019

Взгляните на библиотеку gopherJS websocket .Этот был создан для запуска в браузере (первоначально js).

Недавно я видел видео на YouTube, использующее его в WASM, но больше не смог его найти.

...