Socket Queue Position prüfen.

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
flyingfish
User
Beiträge: 33
Registriert: Sonntag 23. Januar 2005, 23:36

Montag 29. August 2005, 12:56

Hallo,

hab ein client server system, welches über einen Socket kommuniziert.
Kann ich irgendwie herausfinden, an welcher Position der Socketqueue die Clientanfrage eingegliedert wird?

Danke,

Flyingfish
henning
User
Beiträge: 274
Registriert: Dienstag 26. Juli 2005, 18:37

Freitag 2. September 2005, 11:46

Sorry, ich verstehe deine Frage ehrlich gesagt nicht :-/
Kannst du da vielleicht ein bisschen Pseude-code geben oder ein bisschen genauer erklären, was du meinst?
flyingfish
User
Beiträge: 33
Registriert: Sonntag 23. Januar 2005, 23:36

Montag 5. September 2005, 12:06

Nun ja, jeder erstellte Socket kann ja eine Anzahl von Verbindungen queuen und arbeitet diese dann ab. Wenn ein Client nun eine neue Verbindung aufbaut, wollte ich gerne wissen, wieviele Verbindungen es schon gibt.

Gruss,

Flyingfish
BlackJack

Montag 5. September 2005, 13:39

flyingfish hat geschrieben:Nun ja, jeder erstellte Socket kann ja eine Anzahl von Verbindungen queuen und arbeitet diese dann ab. Wenn ein Client nun eine neue Verbindung aufbaut, wollte ich gerne wissen, wieviele Verbindungen es schon gibt.
Geht soviel ich weiss nicht. Habe jedenfalls nichts in den man-pages zu `sockets` gefunden. Und wenn es von C aus schon nicht geht...

Wozu brauchst Du die Information denn?
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

Montag 5. September 2005, 14:28

öhm der server horcht ja auf einem port, wenn eine verbindung aufgebaut wird erstellt er ein socket. normalerweise queued der server bis max 5 clients gleichzeitig, nacher wird ein socket erstellt. du musst einfach all diese erstellten sockets zählen, dann hast du die anzahl aktiven verbindungen.

Gruss
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Montag 5. September 2005, 19:44

Das erinnert mich aber eher an den Twisted/Asyncore-Ansatz mit Protocols und Factories, so das die Factory auf dem Post lauscht und wenn sich jemand verbindet wird eine Protocol-Instanz gestartet und ihr diese Anfrage übergeben.. aber sowas meist du doch nicht, oder?
My god, it's full of CARs! | Leonidasvoice vs Modvoice
BlackJack

Montag 5. September 2005, 23:34

rayo hat geschrieben:öhm der server horcht ja auf einem port, wenn eine verbindung aufgebaut wird erstellt er ein socket. normalerweise queued der server bis max 5 clients gleichzeitig, nacher wird ein socket erstellt. du musst einfach all diese erstellten sockets zählen, dann hast du die anzahl aktiven verbindungen.
Ich hatte die Frage so verstanden, dass das Queueing/Puffern von Verbindungsanfragen beim Betriebssystem gemeint war. Man kann bei Server-Sockets angeben, das sich das Betriebssystem eine vorgegebene Anzahl von Verbindungsversuchen merkt solange man gerade eine Anfrage bearbeitet und diese "ge-queuet-en" Verbindungen dann bei den folgenden `listen()` Aufrufen zurückgibt.

Das ist Hauptsächlich dazu da, damit in der kurzen Zeit während der `listen()` Aufruf die Anfrage zum Beispiel an einen Thread zur Bearbeitung übergibt, keine Clients abgewiesen werden. Sonst hätte man bei Servern mit einer hohen Anfragerate dauernd Fehlversuche bei den Clients.

Falls das nicht die Frage war, dann bitte präzisieren...
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

Dienstag 6. September 2005, 06:54

Ja schon, aber was nützt einem diese Anzahl? Die sind ja nur für eine extrem kurze Zeit da. Mehr als 5 gibt man dort in der Regel nicht an.

Gruss
flyingfish
User
Beiträge: 33
Registriert: Sonntag 23. Januar 2005, 23:36

Dienstag 6. September 2005, 10:20

Hallo Leute,

ja Blackjack, das war meine Frage. Sobald die Anfrage da ist, wird ein C Block bearbeitet, und somit gibt es wartezeiten von circa 1 Minute.
Aber vielleicht sollte ich noch eine Queue einfügen und das C Programm in einem Thread laufen lassen. Ist vielleicht ansonsten etwas unsauber.
Was meint Ihr?

Gruss,

Flyingfish
BlackJack

Dienstag 6. September 2005, 23:01

flyingfish hat geschrieben:ja Blackjack, das war meine Frage. Sobald die Anfrage da ist, wird ein C Block bearbeitet, und somit gibt es wartezeiten von circa 1 Minute.
Aber vielleicht sollte ich noch eine Queue einfügen und das C Programm in einem Thread laufen lassen. Ist vielleicht ansonsten etwas unsauber.
Was meint Ihr?
Eine Minute ist schon ziemlich lang. Kommt natürlich darauf an wieviele Clients Du ewartest, wenn das nur 1-2 pro Minute sind, dann würde das so wohl noch ganz gut funktionieren, aber wenn es skalieren soll, dann sind Arbeits-Threads und eine Queue wohl die bessere Lösung.

Dann kannst Du auch ganz einfach mitzählen wieviele Clients gerade bearbeitet werden oder noch in der Queue stecken.
flyingfish
User
Beiträge: 33
Registriert: Sonntag 23. Januar 2005, 23:36

Mittwoch 7. September 2005, 00:02

Alles klar, dann werde ich das wohl so machen.

Herzlichen Dank euch allen!
Antworten