Ich versuche, mein Verständnis von was blocking
bedeutet in Bezug auf Anforderungen an einen Webserver zu festigen und wenn es klug ist, Anforderungen an einen separaten Arbeiter (date sidekiq) zu übergeben.Wann Arbeit von Webserver zu Arbeiter übergeben
Betrachten Sie die folgenden Beispiele:
Anmeldung mit Facebook
def sign_in response = Faraday.get("https://graph.facebook.com/me?fields=id,email&access_token=#{some_token}") user_info = JSON.parse(response.body) @user = User.find_by(uid: user_info["id"]) ... end
Senden Push-Benachrichtigung über Google Firebase
def send_push_notification ... fcm = FCM.new(FCM_KEY) registration_ids = [recipient_token] resp = fcm.send(registration_ids, data: {body: notification_params[:body]}) ... end
In beiden Beispielen die Bahn erf Die Kosten für einen Drittanbieterdienst sind synchron und möglicherweise kostspielig. Intuitiv würde ich versuchen, diese Fälle mit einem separaten Arbeiter zu behandeln, weil sie die Hauptanwendung Block sind. Aber ich bin nicht 100% sicher, was blockiert bedeutet. Bedeutet es, dass wenn 100 Benutzer versuchen, sign_in
und jeder Faraday.get
Anruf dauert 1 Sekunde dauert es 100 Sekunden für alle Benutzer, um sich anzumelden?
Zum Senden einer Benachrichtigung über FCM können Sie den Hintergrundprozess verwenden. wie sidekiq, delayed_job, ect. und das ist der richtige Weg zum integrierten Benachrichtigungsmodul in der Anwendung. –
@DarpanChhatravala Yeah!Ich würde gerne über den letzten Teil der Frage hören, der fragt: "Ich bin mir nicht 100% sicher, was Blockieren bedeutet. Bedeutet das, dass wenn 100 Benutzer versuchen, sign_in und jeder Aufruf von Faraday.get 1 dauert Zweitens dauert es 100 Sekunden, bis sich alle Benutzer angemeldet haben. " –
Ich habe keine Implementierung exp mit mir Ich wurde einmal ein Blog gelesen, Sie können versuchen, Edelstein 'Faraday-Request-Timer' zu implementieren. Von diesem erhalten Sie die gesamte angeforderte Zeit. hoffe das wird dir helfen :) –