2016-10-04 4 views
-1

Ich agiere als Server, der mehrere Anfragen vom Client in Socket und Handles in einem Thread empfängt.maximale Anzahl, wenn Anfragen per TCP-Verbindung

Sollte ich einen Parameter in der TCP-Ebene festlegen, um die maximale Anzahl von Anforderungen festzulegen, die eine Verbindung gleichzeitig verarbeiten kann? weil in meinem Server-Seite, wenn die Verarbeitung der Anforderung langsam i beobachten, dass andere Anforderungen in der Warteschlange nach oben sind (Client sagt Anfrage gesendet wurde, aber ich erhalten es spät)

mir bitte

+0

Es gibt kein Maximum, und Sie können keins setzen, und es würde Ihr Problem nicht lösen, wenn Sie könnten. Anfragen pro Verbindung sind sequentiell und Ihr Problem ist Nebenläufigkeit, oder besser gesagt das Fehlen. Sie müssen jeden Client-Socket in einem separaten Thread behandeln. – EJP

+0

Ich werde die Anfrage in multi-threaded Mode only.Requests immer wieder kommen in einer persistenten TCP-Verbindung eingerichtet? .wird es auf Antwort warten, bis es mir nächste Anfrage sendet oder ist es unabhängig von Wetter ich schickte Antwort für vorherige Anfrage. – jan

+0

Wenn Sie bereits [Verbindungen oder] Anfragen in einer Multithread-Art bearbeiten, ist es schwierig, wenn nicht gar unmöglich zu sehen, worum es bei Ihrer Frage eigentlich geht. Wie sich Ihre Clients über eine bestehende Verbindung verhalten, hat absolut nichts damit zu tun, eine maximale Anzahl von Anfragen pro Verbindung einzustellen. – EJP

Antwort

1

Führung Wenn es lange dauert Zeit, um die Arbeit zu tun und Sie mehrere Verbindungen gleichzeitig behandeln möchten, müssen Sie ändern, wie Sie Dinge tun.

Wenn Sie während der Verarbeitung einer langen Anfrage viel CPU verwenden, benötigen Sie mehrere Threads. Das ist der einzige Weg, um tatsächlich mehr CPU-Zeit/Sekunde zu erhalten - vorausgesetzt, Sie haben mehrere Kerne verfügbar.

Wenn Sie auf Dinge wie Datei IO warten, können Sie stattdessen asynchrone Verarbeitung verwenden, um die Anforderungen für einen einzelnen Thread zu behandeln, aber behandeln Sie nur ein Stück Stück für Stück.

Das Festlegen einer maximalen Anzahl von TCP-Verbindungen hilft Ihnen nicht, mehr Prozesse schneller zu verarbeiten. Es wird Verbindungen einfach ablehnen und nicht einmal ein "first-come first-served" Verhalten zulassen - es wird nur zufällig sein, wenn ein bestimmter Client überhaupt durchkommt oder nicht.

+0

Derzeit bin ich Bearbeitung Anfrage in mehreren Threads only.Aber noch sehe ich Schlange, wenn DB-Auslastung ist in meiner Seite hoch. Normalerweise dauert es 1 Sekunde, um die Anfrage zu verarbeiten, und ich habe kein Problem. Aber wenn die Verarbeitung dauert etwa 3- 4 s Client sagt, dass sie keine Antwort auf Zeit erhalten.Timeout ist 25s aber.Ich verarbeite und sende in 4 s.Wohin liegt die Anfrage so weit.Aufstehen in der Warteschlange? – jan

+0

Wenn Ihre Datenbank zu langsam ist, müssen Sie sie beschleunigen. Ob Sie möchten, dass Ihre Kunden eine Zeitüberschreitung oder abgewiesene Verbindungen erhalten, spielt keine große Rolle. Wenn Sie Ihre Datenbank sättigen, möchten Sie vielleicht nicht so viele Verbindungen akzeptieren, aber es gibt viele Möglichkeiten, sie zu lösen. Aber das Tunen von TCP-Verbindungen ist wahrscheinlich der falsche Ansatz. – xaxxon

Verwandte Themen