Sockets multiplexen



  • Also folgendes: ein Client sendet den Befehl "get servername" (nur als beispiel). Der Befehl gelangt zum ToolX und weiter zum Server. Jetzt schick der Server die Antwort: "servername: blan" zum ToolX und dann zum Client - nur an welchen jetzt. Ich muss jetzt praktisch wieder wissen, wer diese anfrage gesendet hat. Darum gehts - habt ihr da eine idee?

    mfg blan



  • äh? sich merken von wem die Anfrage kam... Läuft das asynchron? Ansonsten existiert ja das Problem gar nicht.



  • Ich würde sagen er hat folgende Situation:

    Cli1 \
          \
    Cli2 ------ Tool X ------ Server
          /
    Cli3 /
    

    Server ist von ihm nicht beeinflussbar, Tool X möchte er schreiben, und er hat jetzt das Problem, wenn Cli2 einen Befehl schickt, und Tool X es an Server weiterleitet, dass er anhand der Antwort nicht erkennen kann, dass sie zum Befehl von Cli2 gehört, weil Server nur für einen Client ausgelegt ist.

    Stimmt das soweit, blan? (Nur, um mal die Fronten zu klären 😉 )

    Eine Idee:
    Bevor vom Server eine Antwort zu einem Befehl von CliX kommt, halte alle weiteren Befehle in einer Queue zurück, dann weisst Du dass die Antwort sich auf den zuletzt gesendeten Befehl beziehen muss.



  • Genau so ist es gemeint LordJaxom. Der Server ist zwar auch von mir geschrieben aber da ich das Interface gern schlicht und nicht für viele Clients ausgelegt haben will suche ich eine lösung ohne das Interface vom Server zu ändern.

    Danke schonmal für dein Vorschlag LordJaxom, ich werd mir überlegen wie gut ich den verwenden kann. Hat sonst noch jemand Ideen wie ich das realisieren kann?

    mfg blan



  • Hallo blan,

    ich nehme mal an, dein Server sendet nicht nur die Antwort, sondern auch
    ein Schluesselwort, an dem du erkennen kannst (bzw. Tool X), welche Frage
    gestellt wurde. Nun brauchst du nur noch zu jedem Client dieses speichern
    und kannst somit erkennen, fuer wen die Antwort ist. Sollte keine Antwort
    erwartet werden, speicherst du halt nichts.

    Gruss mcr



  • diese überlegung hatte ich auch schon. aber wenn mehrere clients die gleiche anfrage machen funktioniert das system nicht oder nur mit größerem aufwand.

    mfg blan



  • Wieso sendet toolX nicht eine kleine ID je nach User (ein Byte würde ja für 255 Clients schon ausreichen) mit jeder Nachricht mit, und Server sendet dann die ID in der Antwort wieder zurück, wodurch dann toolX wieder weiß, an welchen User die Antwort gerichtet ist... Das würde deiner Idee vom Multiplexen auch am nächsten kommen, glaub ich.



  • -Foo- schrieb:

    Wieso sendet toolX nicht eine kleine ID je nach User (ein Byte würde ja für 255 Clients schon ausreichen) mit jeder Nachricht mit, und Server sendet dann die ID in der Antwort wieder zurück, wodurch dann toolX wieder weiß, an welchen User die Antwort gerichtet ist... Das würde deiner Idee vom Multiplexen auch am nächsten kommen, glaub ich.

    richtig, dazu müsste ich aber das protokoll ändern. aber da das die beste und einfachste lösung ist werd ich das wohl so machen müssen.

    danke!

    mfg blan



  • blan schrieb:

    diese überlegung hatte ich auch schon. aber wenn mehrere
    clients die gleiche anfrage machen funktioniert das system nicht oder nur
    mit größerem aufwand.

    das sehe ich noch nicht so.

    Es senden mehrere (sagen wir mal 3) Clients eine Anfrage mit Schluessewort: XYZ

    Du speicherst nun zu den 3 Clients das Schluesselwort.

    Nun schickt dein Server eine Antwort. Du gehst durch die gesamte Liste und
    vergleichst alle dort befindlichen Schluesselworte mit dem vom Server.
    Bei Uebereinstimmung sendest du den entsprechenden Clients die Antwort und
    loeschst das Schluesselwort.
    Bei Nicht-Uebereinstimmung machst du gar nichts.

    Ok, es ist ein wenig ineffizient, da du mehrmals eine Anfrage an den Server
    machst, und die Antwort nicht immer benoetigt wird.

    Sollte die Antwort eines Servers von den Eingaben der Clients abhaengen bzw.
    sich aendern koennte, musst du ein wenig mehr Aufwand treiben, damit du das
    richtige bekommst. Aber das musst du eh machen.

    Gruss
    mcr



  • Aber was ist, wenn der Server abhängig davon, welcher Client verbunden hat (z.B. da sich dieser mit User/Pw einloggt), unterschiedliche Antworten zurück schickt? Dann fehlt die eindeutige Zuordnung doch auch wieder...



  • Dann wird er wohl etwas am Protokoll aendern muessen, oder
    solange das Senden zum Server solange stoppen muessen, bis
    dieser die Antwort geschickt hat.

    Ich glaube, das Protokoll aendern, ist das, was hier am
    ehesten erfolg verspricht.

    Gruss
    mcr


Anmelden zum Antworten