2014-01-29 5 views
9

Ich versuche, einen Endpunkt zu einer vorhandenen Anwendung hinzuzufügen, die Server gesendete Ereignisse sendet. Es kann oft für ~ 5 Minuten kein Ereignis geben. Ich hoffe, diesen Endpunkt zu konfigurieren, um meinen Server nicht zu schneiden, selbst wenn die Antwort in ~ 1 Minute nicht abgeschlossen wurde, aber alle anderen Endpunkte zu Zeitüberschreitung, wenn der Server nicht antwortet.Wie kann ich HAProxy so konfigurieren, dass es mit serverseitigen Ereignissen funktioniert?

Gibt es eine einfache Möglichkeit, Server gesendet Ereignisse in HAProxy zu unterstützen?

Antwort

5

Hier ist mein Vorschlag für HAProxy und SSE: Sie haben viele benutzerdefinierte Timeout-Optionen in HAProxy, und es gibt 2 interessante Optionen für Sie.

Die timeout tunnel gibt Timeout für Tunnelverbindung an - verwendet für WebSockets, SSE oder CONNECT. Umgehen Sie Server- und Client-Timeout.

Die timeout client die Situation behandelt, wo ein Client die Verbindung verliert (Netzausfall, verschwinden vor der ACK-Sitzung zu beenden, etc ...)

In Ihrem haproxy.cfg, ist es das, was Sie tun sollten, zuerst in Ihrem defaults Abschnitt:

# Set the max time to wait for a connection attempt to a server to succeed 
timeout connect 30s 
# Set the max allowed time to wait for a complete HTTP request 
timeout client 50s 
# Set the maximum inactivity time on the server side 
timeout server 50s 

Nichts Besonderes bis dahin.

nun noch im defaults Abschnitt:

# handle the situation where a client suddenly disappears from the net 
timeout client-fin 30s 

Als nächsten Sprung auf Ihre backend Definition und hinzufügen:

timeout tunnel 10h 

Ich schlage vor, einen hohen Wert, scheinen 10 Stunden ok.

Sie sollten auch vermeiden, die Standardoption http-keep-alive zu verwenden, SSE verwendet sie nicht. Verwenden Sie stattdessen http-server-close.

Verwandte Themen