2016-10-24 76 views
0

尋找關於如何以適用於本地Go執行平臺和GopherJS的方式實現WebSocket客戶端的一般指導。WebSocket與GopherJS的兼容性

似乎GopherJS有兩個WebSocket庫,一個在gopherjs/websocket和一個在goxjs/websocket。看來goxjs/websocket是「同構」,這意味着它應該在GopherJS中工作,同時保持與golang.org/x/net/websocket的API兼容。這將在兩個執行環境中提供兼容性,這很好,但我不確定它是否是最佳解決方案。 gopherjs/websocket似乎在瀏覽器執行環境之外工作,所以它是一個非啓動器。

的原生應用程序轉到最值得推薦的WebSocket的實現似乎是gorilla/websocket的時刻。我想使用它,因爲它似乎有一個良好的API,它看起來相當全面。我可以成功運行gopherjs build如果我輸入gorilla/websocket,但我擔心它會在JavaScript環境會失敗,或者它會被編譯成成JavaScript不使用瀏覽器的實現WebSocket的API的。

我沒有看到太多指導上庫適合哪種情況,所以希望這可以幫助比較和對比,並提供必要做出一個不錯的選擇方向。

回答

1

我沒有對你應該做的任何指導,但可以分享這些事實:

大猩猩/包的WebSocket是關於TCP連接的WebSocket協議的實現。由於瀏覽器應用程序無法直接訪問TCP連接,因此大猩猩/ websocket程序包將不會在瀏覽器中運行。

有由大猩猩/ WebSocket的包和gopherjs/WebSocket的包裝提出的模型的差異。 WebSocket協議是基於消息的,並且大猩猩/ websocket包暴露了圍繞消息的API。 gopherjs/websocket提供綁定,使基於消息的WebSocket協議看起來像是一串字節。消息不會暴露在gopherjs/websocket API中。

x/net/websocket包幾乎都被放棄了。有long standing issues with protocol compliance尚未解決。