Neben Polling und aktiver Benachrichtigung über Websockets gibt es auch noch sogenannte Webhooks.
Diese würde ich grundsätzlich bevorzugen, denn sie benötigen auf beiden Seiten keine permanenten Ressourcen und sind stateless, und lassen sich somit deutlich einfacher skalieren.
Da gibt es 2 generelle Ansätze:
Der Client-Dienst schickt dem Server-Dienst die Aufgabe mit einer Id (z.B. xyz), und bekommt sofort die Antwort dass die Anfrage angenommen wurde.
Der Server-Dienst verarbeitet die Anfrage.
Ist er fertig, ruft er eine ihm bekannte
URL auf dem Client-Dienst auf und sagt diesem somit aktiv, das Job xyz fertig ist. Er schickt nicht das Ergebnis mit, sondern das ist nur ein ganz kurzes "Hey, xyz ist fertig!"
Der Client-Dienst kann jetzt das Ergebnis abrufen und damit weiter machen.
Der zweite Ansatz ist so ähnlich, nur kennt der Server-Dienst die
Url des Client-Dienstes nicht.
Der Client-Dienst gibt also beim Aufruf nicht nur die Job-Id mit, sondern die komplette
Url, die der Server-Dienst aufrufen soll. z.B. "https://{
ip}:{port}/webhooks/job-fertig/xyz" <- da steckt die job-id xyz auch drin
Nach dem Abarbeiten ruft der Server-Dienst also einfach immer die übergebene
Url auf, und meldet somit das er fertig ist, ohne dass er die Adresse oder gar eine Id vorher kennen müsste. Der Client kann also komplett selber bestimmen, wie er benachrichtigt werden will und es sind keine Änderungen am Server-Dienst nötig, wenn der Client irgendwann mal z.B. einen weiteren Parameter möchte.