寻找关于如何以适用于本地Go执行平台和GopherJS的方式实现WebSocket客户端的一般指导。
看来GopherJS有两个WebSocket库,一个在gopherjs/websocket
,一个在goxjs/websocket
。似乎goxjs/websocket
是" isomorphic",这意味着它应该在GopherJS中工作,同时保持与golang.org/x/net/websocket
的API兼容。这将在两个执行环境中提供兼容性,这很好,但我不确定它是否是最佳解决方案。 gopherjs/websocket
似乎无法在浏览器执行环境之外工作,因此它不是首发。
目前针对原生Go应用程序推荐的最佳WebSocket实现似乎是gorilla/websocket
。我想使用它,因为它似乎有一个很好的API,它似乎相当全面。如果我导入gopherjs build
,可以成功运行gorilla/websocket
,但我担心它会在JavaScript环境中失败,或者它会被编译成JavaScript没有使用浏览器的WebSocket API实现。
我没有看到关于哪个库适合哪种情况的指导,所以希望这有助于比较和对比并提供做出正确选择所需的方向。
答案 0 :(得分:1)
我对你应该做什么没有任何指导,但可以分享这些事实:
gorilla / websocket包是TCP连接上的Websocket协议的实现。由于浏览器应用程序无法直接访问TCP连接,因此gorilla / websocket包将无法在浏览器中运行。
gorilla / websocket包和gopherjs / websocket包提供的模型有所不同。 WebSocket协议是基于消息的,gorilla / websocket包公开了一个围绕消息的API。 gopherjs / websocket提供了绑定,使基于消息的WebSocket协议看起来像一个字节流。消息不会在gopherjs / websocket API中公开。
x / net / websocket包几乎全部放弃了。有long standing issues with protocol compliance尚未解决。