Ich habe eine Server-Client-Anwendung (Java EE & amp; Android), Kommunikation über Websockets. Die Kommunikation funktioniert und auch das Protokoll selbst zum Senden von Objekten als JSON, die korrekt verpackt, serialisiert, gesendet, deserialisiert, ausgepackt und neu aufgebaut werden. Beide Anwendungen verwenden ein anderes Bibliotheksprojekt mit allen möglichen Anfrage- und Antwortklassen.
Nun zu meinem Problem: Die Bibliothek sollte auch eine Strategie für nicht blockierende Kommunikation implementieren, jedoch eine transparente Anfrage-Antwort-Implementierung. Wahrscheinlich bin ich nicht der Erste mit diesem Problem, also denke ich, dass es da draußen einige nette Implementierungen geben könnte:).
Was ich will:
%Vor% Der Code sollte eine SleepAndReturnRequest
und dann eine TimeRequest
natürlich non-blocking senden. Die erste Anfrage dauert 5 Sekunden, die zweite Anfrage fast null Millisekunden. Ich erwarte, dass die Implementierung den zweiten Rückruf sofort nach Erhalt der Antwort aufruft, während der erste Rückruf nach etwa 5 Sekunden aufgerufen wird. Die Implementierung ist verantwortlich für den Anfrage-Antwort-Abgleich auf der anfragenden Seite.
Was ich versucht und überlegt habe:
Googlas listenable future
von Google wäre ein guter Ansatz für die "antwortende Seite", denke ich, weil es nur eine Aufgabe ist, die auf einem beliebigen Thread läuft und das Ergebnis am Ende zurücksendet. Das sollte einfacher sein.
Für die "anfragende Seite" brauche ich eine Implementierung, die einer Nachricht einen eindeutigen Bezeichner hinzufügt, um die Antwort abgleichen zu können. Hoffentlich können Sie mir einige Pakete sagen, die diesen Job erledigen.
Danke, dass Sie mir geholfen haben.
// bearbeiten:
Ich denke, meine Frage wurde missverstanden oder ist nicht präzise genug. Überlegen Sie, wie Sie GET oder POST über Websocket implementieren. Jede GET / POST-Anfrage hat eine Antwort und dann wird die Verbindung geschlossen. Clients verbinden sich mit einem bestimmten Port, Server nimmt einen Thread aus einem Thread-Pool, verarbeitet die Anfrage und antwortet. Die Übereinstimmung von Anfrage zu Antwort finde ich in der Transportschicht # 4.
Da ich Websockets verwenden möchte, muss ich diese Anpassung in Software-Ebene 7 implementieren.
Hier sind einige Schritte, die ich implementiere. K
ist der eindeutige Schlüsseltyp, V
ist der generische Typ des Inhalts einer Nachricht. Das könnte eine Zeichenfolge, ein Byte-Stream oder was auch immer sein.
Es gibt viel zu testen für mich, aber ich denke, es wird funktionieren.
Sie könnten versuchen ProtoBuf-RPC-Pro - aber es ist nicht für WebSockets, obwohl ich denke, dass es ein Projekt gibt auf GitHub unterstützt es:)
Tags und Links java communication netty guava grizzly