[C++] Verbindung halten oder bei jeder Anfrage neu aufbauen ?

Mo1k

Mitglied
Hallo,

ich bin gerade am überlegen, welche Vorgehensweise für meinen Server am besten wäre.
Folgende Situation:
Der Client braucht nur neue Daten, wenn der Benutzer im Clientprogramm agiert, also wenn er zb einen Button drückt etc.
Soll heißen, es kann sein dass er alle 2 Sekunden oder jede Minute neue Daten vom Server braucht. der Server soll für viele Clients ausgelegt werden. Nun weis ich nicht ob ich die Verbindung halten soll, oder bei jeder Anfrage eine neue SSL Verbindung aufbauen soll. Der Benutzer muss sich beim Server einloggen und eingeloggt bleiben, was ich dann mit sessions erledigen würde ( Erstellung einer zufälligen Sessionid zb aus einem zufälligen String einen Hash bilden und diese beim erstmaligen einloggen an den Client schicken, dieser schickt dann bei jeder Anfrage an den Server diese id mit ). Wäre es Ressourcenschohnend die Verbindung zu halten oder immer neu aufzubauen ?

Mfg
 
Hi

wie wäre es mit einer Mischung?
Wenn 10sec nichts passiert ist: Verbindung trennen (und wenn benötigt eben wieder aufbauen).
 
ist auch ne idee aber ich denke dass sich das nichts mit der variante Verbindung gleich wieder zu trennen schenken wird ( wenn nicht sogar schlechter, da man mehr Code brauchen wird timer etc. ) aber trozdem guter Vorschlag.
 
Kann ich mir eigentlich nicht vorstellen, dass ein kleines Stück lokaler Code langsamer als ein Verbindungsaufbau + SSL sein soll.
Thread und/oder GUI-Message-Behandlung müssen sowieso schon vorhanden sein.
Aber sicher sagen kann man es nur nach einem Test.
 
Würde vorschlagen, du testest, wie lange beide Möglichkeiten dauern / welche Recourcen sie beanschlagen. Dann kannst du sehen, ob es sich lohnt. Wobei ich denke, dass auch bei 1-2 Minuten Aktivitätslosigkeit das Stehenlassen der Verbindung effektiver sein sollte.
Bedenke einfach die Anfragen, die der Server bekommt:
Wenn die Verbindung steht, muss er das zwar intern speichern, aber sich nicht wirklich damit auseinandersetzen. Er muss dann arbeiten, wenn eine Anfrage von Client kommt.
Wenn die Verbindung bei jeder Anfrage neu entsteht, wäre das ein sehr großer Aufwand - denn er hat immer noch die Arbeit, die Anfrage zu beantworten (wahrscheinlich nicht so viel) + die Verbindung aufzubauen und wieder abzubrechen (viel.). Wenn du wirklich viele Clients hast und jeder alle paar Sekunden eine neue Verbindung aufbaut und nach einer Anfrage wieder abbricht, dürfte das zumindest recht schmerzhaft für den Server sein.

lg
Dece
 
hatte viel zu tun in letzter Zeit, werde aber am wochenende ein paar Szenarien testen.

Wie gesagt, ich hab keine Ahnung ob das, was ich vorhabe, ein Erfolg wird oder nicht, aber ich will meinen Server dafür auslegen. Habe viel gelesen und gehört dass linuxserver mit mehr als 10k gleichzeitigen Verbindungen probleme haben wird. Das spricht für das Abbauen und wieder herstellen.

Was für das Verbindung halten spricht: Ich verschlüssele die Verbindung mit SSL und wenn der Server bei jedem neuen Verbinden einen Handshake etc machen muss fällt das doch auch sehr ins Gewicht oder ?
 
Was für das Verbindung halten spricht: Ich verschlüssele die Verbindung mit SSL und wenn der Server bei jedem neuen Verbinden einen Handshake etc machen muss fällt das doch auch sehr ins Gewicht oder ?
Ja eben, das meinte ich oben.

Habe viel gelesen und gehört dass linuxserver mit mehr als 10k gleichzeitigen Verbindungen probleme haben wird. Das spricht für das Abbauen und wieder herstellen.
Wenn da wirklich >10k Verbindungen gleichzeitig erwartet werden...
weiß ja nicht, was der Server so alles machen soll,
aber könnte der da nicht generell überfordert sein?

Egal ob Windows/Linux, es gibt jedenfalls Beschränkungen bei den maximalen Sockets.
10k ist nicht gerade wenig.

Man könnte natürlich auch etwas machen,
dass die Verbindungen vom Server aus getrennt werden
(schon vor dem Clienttimeout),
wenn sich zu viel wenig-aktive ansammeln.
 
Zurück