Tyrus Websocket-Client @OnMessage nie aufgerufen - Storj Open-Source-Projekt

9

Ich arbeite an einem Open-Source-Projekt, Storj. Ich schreibe einen Java-Client, der sich mit einem Node.js-Websocket-Backend verbindet. Der Kunde benutzt Tyrus. Die Kommunikation sollte wie folgt aussehen:

  • Verbinden
  • Client sendet Auth-Token (Text).
  • Server sendet eine Datei zurück (binär).
  • Der Server schließt die Verbindung.

Ich habe Probleme, da meine @OnMessage niemals aufgerufen wird. Ich habe es mit einem einfachen JavaScript-Client hier online auf die gleiche URL und mit dem gleichen Token versucht: Ссылка

Ich bekomme eine Antwort, die mir sagt, dass etwas mit dem Java-Projekt nicht stimmt.

Bevor ich die Datei zu einem früheren Zeitpunkt herunterladen kann, kann ich die Datei problemlos hochladen. Bei diesem Schritt muss jedoch keine @OnMessage aufgerufen werden (die Datei wird nur hochgeladen, und der Server trennt die Verbindung mit einer Nachricht). Daher bin ich mir nicht sicher, ob meine @OnMessage jemals funktioniert.

Hier ist der relevante Code für den Websocket (auch verfügbar auf Github): Ссылка

%Vor%

Und der Code, der diesen Websocket startet, finden Sie hier Ссылка :

%Vor%

Ich habe auch versucht, Tyrus auf die neueste Version zu aktualisieren, und ich bekomme das gleiche Ergebnis. Irgendwelche Ideen?

Die Ausgabe dieses Codes lautet:

%Vor%

Nach dem Senden der Nachricht hängt es eine Weile vor der Meldung "NORMAL_CLOSURE" von der @OnClose.

Update: Eine wirklich einfache Möglichkeit, dies auszuführen, um das Problem zu reproduzieren

Ich habe einen Test-Benutzernamen und ein Passwort zum git-Repository hinzugefügt. Der verfügbare Code ist also hier: Ссылка

Um es auszuführen, müssen Sie nur storj.io.client.main.MainTest

ausführen

Ein kurzer Durchlauf dessen, was es tut. Es sendet zuerst einige HTTP-Anfragen, um ein Token zu erhalten. Es wird dieses Token verwenden, um über einen Websocket eine Verbindung zu jemandes Maschine herzustellen, und es sendet dieses Token als Text. Als Antwort sollte es eine Datei als Bytes erhalten.

Bevor es eine Verbindung herstellt, gibt es das Token und die Adresse aus, mit der es sich verbinden soll. Es wird ein wenig hängen bleiben, bevor es geschlossen wird und keine onMessage-Methode wird jemals aufgerufen. Wenn Sie zum Testen eine System.exit-Datei hinzufügen (Zeile 152 in DefaultStorjClient.java auskommentieren), wird keine Verbindung hergestellt, sodass Sie dieses Token in einem anderen Client verwenden können. Ich habe mit Ссылка getestet. (Stellen Sie sicher, dass Ihr Browser unsichere URLs zulässt, da es nicht "wss" ist, um dies zu tun In Chrome musst du oben rechts auf das Schild klicken. Ich kann sehen, dass der Server antwortet:

Dies zeigt, dass tatsächlich ein Blob als Antwort auf die Textnachricht gesendet wird, aber die @OnMessage in Tyrus wird nie ausgelöst.

    
ThePerson 25.08.2016, 20:15
quelle

1 Antwort

2

Am Ende bin ich zu TallNate gewechselt, und dieses Problem existiert nicht.

Ich fand nach dem Timing, dass es mich nach 30 Sekunden immer getrennt hat. Normalerweise sind die Antworten schneller als in den 30ern, also bin ich mir nicht sicher, warum es hängen blieb und dann die Verbindung getrennt wurde. Ich habe versucht, die Auszeit in Tyrus zu setzen, aber es hat sich immer noch auf der 30er-Marke getrennt. Am Ende probierte ich TallNate aus, um zu sehen, ob ich dort die Zeitüberschreitung einstellen konnte ... und aus der Box funktionierte es einfach.

Ссылка

    
ThePerson 28.08.2016, 12:34
quelle

Tags und Links