Ich habe eine typische Client-Server-Kommunikation: Der Client sendet Daten an den Server, der Server verarbeitet sie und sendet sie an den Client zurück. Das Problem ist, dass die Verarbeitung ziemlich viel Zeit in Anspruch nehmen kann - in der Größenordnung von Minuten. Es gibt ein paar Ansätze, die zur Lösung dieses Problems verwendet werden könnten.
- Stellen Sie eine Verbindung her und halten Sie sie aufrecht, bis der Vorgang abgeschlossen ist und der Client die Antwort erhält.
- Verbindung aufbauen, Daten senden, Verbindung schließen. Nun findet die Verarbeitung statt, und sobald sie abgeschlossen ist, könnte der Server eine Verbindung zum Client herstellen, um die Daten zu senden.
- Verbindung aufbauen, Daten senden, Verbindung schließen. Die Verarbeitung findet statt. Der Client fragt den Server alle n Minuten/Sekunden, ob der Vorgang abgeschlossen ist. Wenn die Verarbeitung abgeschlossen ist, holt der Client die Daten ab.
Ich habe mich gefragt, welcher Ansatz der beste wäre. Gibt es vielleicht einen "de facto" Standard für die Lösung dieses Problems? Wie "teuer" ist das Öffnen eines Sockets in Java? Lösung 1. scheint mir ziemlich unangenehm zu sein, aber 2. und 3. könnten funktionieren. Das Problem bei Lösung 2. ist, dass der Server wissen muss, auf welchem Port der Client lauscht, während Lösung 3. einen gewissen Netzwerk-Overhead verursacht.