通过golang在WebAssembly上的Websocket?

是否可以在wasm over上编写Websocket客户端? 我尝试使用 gorilla / websocket </ code>,但没有成功:</ p>

  func main(){
ws:= func(this js.Value, 输入[] js.Value)接口{} {
go func(){
wsDial,r,err:= websocket.DefaultDialer.Dial(“ ws:// localhost:3000 / ws”,nil)
fmt .Println(wsDial,r,err)
}()
返回nil
}

js.Global()。Set(“ ws”,js.FuncOf(ws))

选择{ }
}
</ code> </ pre>

调用 ws()</ code>时收到以下错误:</ p>

  拨号tcp:协议不可用
</ code> </ pre>
</ div>

展开原文

原文

Is it possible to write a Websocket client in wasm over go? I have tried using gorilla/websocket, but no success:

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 {}
}

I get the following error when calling ws():

dial tcp: Protocol not available

douchao9899
douchao9899 谢谢,但是我知道如何实现客户端,如您所见,我正在执行与示例中第32行相同的操作。实际上,这与库无关,而与go和wasm有关。
一年多之前 回复
dongzhan1492
dongzhan1492 您应该看一下示例客户端:github.com/gorilla/websocket/blob/master/examples/echo/…
一年多之前 回复

2个回答



我已通过从全局 JavaScript </ code>对象中检索 WebSocket </ code>对象来解决了该问题 ,在我的情况下是 window </ code>,因为我正在浏览器中运行它。 我只使用了“ syscall / js”库。 看起来像这样:</ p>

  ws:= js.Global()。Get(“ WebSocket”).New(“ ws:// localhost:8080 / ws”)\  n 
ws.Call(“ addEventListener”,“ open”,js.FuncOf(func(此js.Value,args [] js.Value)接口{} {
fmt.Println(“ open”)

ws.Call(“ send”,js.TypedArrayOf([] byte {123}))
返回nil
}))
</ code> </ pre>
</ div>

展开原文

原文

I have solved it by retrieving the WebSocket object from the global JavaScript object, which in my case is window because I am running this in a browser. I have used only the "syscall/js" library. It looks like this:

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
}))

drqrdkfue521903877
drqrdkfue521903877 这似乎是正确的,因为在WASM中创建WebSocket对象应该是不可能的。 因为您必须打电话到外面,这就是您在做什么。
一年多之前 回复



看看 gopherJS websocket库。 </ p>

我最近看到了一个YouTube视频,该视频正在WASM中使用,但我找不到了。</ p>

p>
</ div>

展开原文

原文

Have a look at the gopherJS websocket library. This one was created to run in the browser (originally js).

I recently saw a youtube video with it being in use in WASM but I couldn't find it any more.

dsaxw4201
dsaxw4201 是的...如果可以编译为wasm,为什么还要编译为js:D
一年多之前 回复
dpwjx32578146
dpwjx32578146 是的,经过一些研究,我了解到gopher / js快要死了,是的,syscall / js将是合理的选择
一年多之前 回复
dqd72925
dqd72925 gopherjs和wasm对go的支持均由Richard Musiol创建。 syscall / js已针对wasm进行了调整,因此我将使用它。
一年多之前 回复
doujiebo9849
doujiebo9849 我看了一下,很有趣。 您是否对gopherjs / js和syscall / js之间有什么区别有一个想法,最适合wasm,从文档中看,似乎syscall / js是
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐