[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Aug 2004
    Beiträge
    923

    RPG Socket Serverinstanz

    Hallo again,

    heute habe ich mal eine knackige Frage denke ich.
    Folgendes Szenario:
    Auf der einen Seite ein Programm, welches am Port lauscht und innerhalb einer Schleife solange Accept(Socket) versucht, bis Daten anliegen. Immer wenn ein neuer Satz anklopft, wird der Socket per GiveDescriptor an eine von mehreren Serverinstanzen übergeben.
    Auf der anderen Seite laufen nun eben mehrere Serverinstanzen und holen sich sich innerhalb einer Schleife per TakeDescriptor die Zuordnung, lesen die anklopfenden Daten, reagieren entsprechend drauf und schliessen den Socket danach.

    Nun meine Fragen:
    Was würde passieren, wenn ich den Socket nicht schliesse sondern einfach die Schleife wieder neu beginne und den "abgearbeiteten" Socket per TakeDescriptor "überklatsche"? Geht das überhaupt? Was hätte das für Konsequenzen?
    Und angenommen, wir reden hier von einem Mengengerüst von sagen wir mal > 10000 (oder wieviel auch immer) Schleifendurchgänge - könnte das ressourcentechnisch Konsequenzen haben?

    Ich hoffe, ich habe mich verständlich genug ausgedrückt?

    Schönen regnerischen Tag noch

    kuempi

  2. #2
    Registriert seit
    Aug 2004
    Beiträge
    923
    boh ej....

    nicht alle auf einmal bitte.

  3. #3
    Registriert seit
    Aug 2004
    Beiträge
    923

    socket

    hello @all,

    diese socketgeschichte mit takedescriptor und givedescriptor ist noch nicht wirklich ausgestanden.
    programm scheint zu laufen, ob es denn auch so ist, wird die erfahrung zeigen.

    ich mache den thread nochmal auf, um mal zu hören, ob hier einer erfahrung unter ile-rpg damit hat, weil ich mich einfach mal austauschen möchte um zukünftige überraschungen zu vermeiden.

    also die frage ist: hat hier einer erfahrung mit sowas und ist diese(r) jenige welche(r) willens und in der lage sich mal mit mir auszutauschen...(mail,telefon was weiss ich)???

    kuempi

  4. #4
    Registriert seit
    Oct 2003
    Beiträge
    192
    Hi,

    Erfahrung mit Socket Server & Client sind vorhanden, ebenso natürlich der Wille zum Austausch...

    Aber leider kann ich dir bei deinen flexiblen Sockets nicht so richtig helfen, wir haben nämlich pro Server die Clientanzahl auf 2 Begrenz (1 für die wirklichen Daten & 1 Zum Beenden/Testen etc).

    Ich lausche auch einfach auf den Port wo die daten herkommen sollen, lese was mir der Client schickt... entscheide je nach Datensatzart in welche DTAQ ich die Daten schreibe und pro DTAQ läuft wieder 1 Programm dass auf die Daten wartet.

    Bei meinem Client läufts ähnlich... er lauscht den ganzen tag auf 1 DTAQ und wenn da was reinkommt schickt ers an den Server.

    Schönen Sonnigen Tag

    Rince

    P.s. Ich stehe mehr auf Mail/Forumsdiskussionen

  5. #5
    Registriert seit
    Aug 2004
    Beiträge
    923
    Zitat Zitat von Rincewind
    Hi,

    Erfahrung mit Socket Server & Client sind vorhanden, ebenso natürlich der Wille zum Austausch...

    Aber leider kann ich dir bei deinen flexiblen Sockets nicht so richtig helfen, wir haben nämlich pro Server die Clientanzahl auf 2 Begrenz (1 für die wirklichen Daten & 1 Zum Beenden/Testen etc).

    Ich lausche auch einfach auf den Port wo die daten herkommen sollen, lese was mir der Client schickt... entscheide je nach Datensatzart in welche DTAQ ich die Daten schreibe und pro DTAQ läuft wieder 1 Programm dass auf die Daten wartet.

    Bei meinem Client läufts ähnlich... er lauscht den ganzen tag auf 1 DTAQ und wenn da was reinkommt schickt ers an den Server.

    Schönen Sonnigen Tag

    Rince

    P.s. Ich stehe mehr auf Mail/Forumsdiskussionen
    japp...

    ich habe die programme erstmal wieder auf den grossen haufen gelegt.
    grund war, dass im testbetrieb immer nur ein anklopfender satz abgearbeitet und weitergereicht werden konnte.
    folgesätze verursachten dann auf der gegenseite eine mauszeigersanduhr,
    obwohl aus meiner sicht das takeprogramm den socket sauber behandelt hatte.
    ob das nun an meiner programmierung oder an der gegenstelle lag, konnte auf die schnelle so nicht festgestellt werden.
    ich wollte die gegenstelle nun auch nicht mit der nase drauf stossen, dass bei mir "rumgetestet" wird.
    um die laufende produktion nicht zu gefährden wurde deshalb wieder zurück auf die alte konventionelle lösung geschaltet.

    der anlass für mich mit take und give rumzuprobieren war ein mögliches datenaufkommen in der zukunft.
    mit der einfachen lösung kann es ja theoretisch irgendwann mal nen "stau" geben wenn mehrere datensätze gleichzeitig (bzw. innerhalb kürzester zeit) auflaufen und von den folgeprogrammen über die dtaq nicht mehr rechtzeitig "in time" abgearbeitet werden können.
    dies ist aber zur zeit nicht gegeben, deshalb reicht eben zur not die standardlösung.

    sollte sich in zukunft ein performanceengpass ergeben krame ich eben meine lösung wieder raus und teste bis zum erbrechen.

    die redbooks haben btw. da auch nicht weitergeholfen, wobei ich seinerzeit auf grundlage von scott klement seiner vorgestellten lösung entwickelt hatte.

    anyway...

    wenn sich mal wieder was ergibt können wir uns ja abgleichen.

    kuempi

  6. #6
    Registriert seit
    Oct 2003
    Beiträge
    192
    Hi,

    An Scott Klement habe ich mich auch orientiert, ist einfach eine schöne (und schön dokumentierte) Lösung.

    Das mit dem "Stau" ist natürlich eine Gefahr wenn mehrere Clients an einen Server senden.
    Bei uns muss sichergestellt sein dass alle Sätze in der Reihenfolge abgearbeitet werden wie sie ankommen (Karton muss erst von A->B fahren bevor er von B->C fahren kann).

    Da hab ichs definitiv leichter.

    Ich habe bisher auch nur mit 2 Clients getestet, wobei 1 Server halt immer nur 1 Client zurselben Zeit bedienen kann, selbst wenn die bearbeitung nur Millisekunden braucht.

    Aber meine Daten sind , wie gesagt, auch zwingend voneinander abhängig.

    Schönen Tag noch

    Rince

  7. #7
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Dabei ist eine DTAQ (ggf. Keyed) per ActiveX so schön einfach (und auch schnell).
    Zumal durchaus mehrere Job's auf der selben DTAQ horchen und somit quasi parallel arbeiten können.
    Einfache Schnittstellen, schnell und flexibel, zu verwenden von fast allen ClientSprachen von VB/VBA/C++/Java/VisualRPG u.v.m.

    Wenn die DTAQ auch noch auf Disk gesichert wird (Attribut bei Erstellung) ist sogar eine nachgelagerte Verarbeitung (also asynchron) möglich, was bei einer Socket-Verbindung nun mal nicht möglich ist.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  8. #8
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    Zitat Zitat von kuempi von stein
    japp...

    der anlass für mich mit take und give rumzuprobieren war ein mögliches datenaufkommen in der zukunft.
    mit der einfachen lösung kann es ja theoretisch irgendwann mal nen "stau" geben wenn mehrere datensätze gleichzeitig (bzw. innerhalb kürzester zeit) auflaufen und von den folgeprogrammen über die dtaq nicht mehr rechtzeitig "in time" abgearbeitet werden können.
    dies ist aber zur zeit nicht gegeben, deshalb reicht eben zur not die standardlösung.

    sollte sich in zukunft ein performanceengpass ergeben krame ich eben meine lösung wieder raus und teste bis zum erbrechen.

    die redbooks haben btw. da auch nicht weitergeholfen, wobei ich seinerzeit auf grundlage von scott klement seiner vorgestellten lösung entwickelt hatte.

    anyway...

    wenn sich mal wieder was ergibt können wir uns ja abgleichen.

    kuempi
    Hallo,

    da brauchts dann Multithreading und das geht mit RPG/COBOL nicht, deren runtime ist nicht Thread sicher und die H Option schaltet das threading faktisch ab. Mit C sollte das gehen, oder mit Java, ob letzteres allerdings auf der AS rennt, das hängt von den GigaHertz und GigaByte ab.

    mfg

    Dieter Bender
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

Similar Threads

  1. RPG: Client Infos lesen?
    By robertki in forum NEWSboard Programmierung
    Antworten: 25
    Letzter Beitrag: 19-01-07, 08:42
  2. Bibliotheksliste in RPG IV abfragen
    By timeless in forum IBM i Hauptforum
    Antworten: 5
    Letzter Beitrag: 11-01-07, 12:04
  3. Problem mit Java-Methoden Aufruf aus ILE RPG?
    By Stoeberl in forum NEWSboard Programmierung
    Antworten: 8
    Letzter Beitrag: 10-01-07, 10:58
  4. RPG goes Web
    By jth in forum NEWSboard Programmierung
    Antworten: 1
    Letzter Beitrag: 21-12-06, 11:13

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •