2016-04-28 25 views
0

Ich plane die Verwendung Apache Thrift, aber einige Anrufe werden lange laufen/blockieren, aber immer noch einen Rückgabewert, der traditionell über Rückruf zurückgegeben würde.Lang laufende Aufgaben in Thrift

Ich verstehe, dass Thrift does not support Rückrufe (hat sich das geändert?) So denke ich darüber, die Funktion nur blockieren, bis eine Antwort zurückgegeben wird. Wäre das in Ordnung? Will Thrift sich beschweren (Timeout), wenn eine RPC-Anfrage zu lange dauert?

Sie sagen, Thrift war nicht für bidirektionale Kommunikation gedacht, aber es sollte einfach genug sein, mit einer Steckdose zu tun.

Kontext: Ich verwende Thrift oder IPC zwischen zwei Prozessen lokal, daher wird es keine große Last auf dem Server geben, die Bedenken beseitigt, dass lang laufende HTTP-Anfragen den Server überlasten würden.

Fehle ich eine andere Lösung?

Antwort

1

Ich verstehe, dass Thrift nicht Rückrufe unterstützt (hat sich das geändert?)

Nein (nicht unterstützt) und keine (nicht geändert).

einige Anrufe werden lange ausgeführt/blockiert, erfordern aber immer noch einen Rückgabewert, der normalerweise per Callback zurückgegeben würde.

Ja, wenn Sie mit dem RPC-Stil arbeiten wollen oder in dieser Hinsicht technisch begrenzt sind.

so denke ich darüber nach, die Funktion nur blockieren, bis eine Antwort zurückgegeben wird. Wäre das in Ordnung?

Lange laufende Anrufe sind eine vollkommen legale Lösung. Selbst das Polling könnte natürlich eine Option sein, es sei denn, Sie überschwemmen den Server mit Anrufen. Hängt davon ab, was "lang" genau bedeutet.

Will Thrift beschweren (Timeout), wenn eine RPC-Anfrage zu lange dauert?

Sie können immer eine neue Anfrage einleiten, nachdem die Verbindung unterbrochen wurde.

Sie sagen Thrift nicht für die bidirektionale Kommunikation gedacht war, aber es sollte mit einem Sockel einfach genug zu tun.

In einer lokalen Einrichtung als Client ist und Server fungiert deren beide Enden in der Tat möglich, und vielleicht die bessere Option in Ihrem Fall.

Im Gegensatz dazu ist es viel schwieriger, das über die interblag zu tun. Wenn Sie daher planen, Ihre Lösung später auf ein solches Szenario zu erweitern, kann dies einige zusätzliche Probleme bereiten, wenn Sie die bidi-Lösung in lange laufende Aufrufe umschreiben. Wenn dies nicht der Fall ist, können Sie diesen Absatz ignorieren.

+0

Große Antwort, danke! Hast du Erfahrung mit http://grpc.io? – conor

+0

die am längsten laufenden Aufgaben könnte "scannen ein Netzwerk für UDB Broadcast-Nachrichten" könnte überall von Sekunden zu mehreren (10s?) Minuten laufen ... Client/Server <-> Client/Server sollte funktionieren .. – conor

+0

Nein, leider nicht. Danke für den Zeiger. – JensG