2016-10-24 4 views
0

Suchen Sie nach allgemeinen Anleitungen zum Implementieren eines WebSocket-Clients auf eine Weise, die sowohl auf nativen Go-Ausführungsplattformen als auch über GopherJS funktioniert.WebSocket-Kompatibilität mit GopherJS

Es scheint, dass GopherJS zwei WebSocket-Bibliotheken hat, eine unter gopherjs/websocket und eine unter goxjs/websocket. Es scheint, dass goxjs/websocket "isomorph" ist, was bedeutet, dass es in GopherJS funktionieren sollte, während es mit golang.org/x/net/websocket API-kompatibel bleibt. Das würde Kompatibilität in beiden Ausführungsumgebungen bereitstellen, was in Ordnung ist, aber ich bin mir nicht sicher, ob es die beste Lösung ist. gopherjs/websocket scheint nicht außerhalb der Browser-Ausführungsumgebung zu funktionieren, also ist es ein Nicht-Starter.

Die am häufigsten empfohlene WebSocket-Implementierung für native Go-Anwendungen scheint im Moment gorilla/websocket zu sein. Ich möchte das verwenden, da es scheint, eine gute API zu haben, und es scheint ziemlich voll ausgestattet zu sein. I kann erfolgreich gopherjs build ausführen, wenn ich gorilla/websocket importieren, aber ich bin besorgt, dass es in der JavaScript-Umgebung fehlschlagen wird, oder dass es in JavaScript kompiliert wird, die die Browser-Implementierung der WebSocket-API nicht verwendet.

Ich sehe nicht viel Anleitung, welche Bibliothek für welches Szenario geeignet ist, also hoffe, dass dies helfen kann, zu vergleichen und zu kontrastieren und die Richtung bereitzustellen, die notwendig ist, um eine gute Wahl zu treffen.

Antwort

1

Ich habe keine Anleitung, was Sie tun sollten, aber diese Tatsachen teilen können:

auf TCP-Verbindungen

Der Gorilla/websocket Paket ist eine Implementierung des Websocket Protokoll. Da Browser-Anwendungen nicht direkt auf TCP-Verbindungen zugreifen können, wird das Gorilla-/Websocket-Paket nicht im Browser ausgeführt.

Es gibt einen Unterschied in den Modellen, die von Gorilla/Websocket-Paket und den Gopherjs/Websocket-Paketen vorgestellt werden. Das WebSocket-Protokoll basiert auf Nachrichten und das Gorilla-/Websocket-Paket macht eine API um Nachrichten verfügbar. Die Datei gopherjs/websocket stellt Bindungen bereit, die das nachrichtenbasierte WebSocket-Protokoll wie einen Bytestrom aussehen lassen. Nachrichten werden in der API gopherjs/websocket nicht verfügbar gemacht.

Das x/net/websocket-Paket ist alles andere als aufgegeben. Es gibt long standing issues with protocol compliance, die nicht angesprochen wurden.