Cleint Server mit COM



  • Hallo,

    Ich schreibe gerade eine bzw. mehrere kleien Apps. Eine Server App steuert mehrere Client Apps (bisher 3 Clients), die Messdaten aufnehmen. Der Server kann die Clients starten, Daten abholen usw.

    Jetzt die Frage. Ich wollte das ganze mit Sockets umsetzen, da ich dafür schon eine kleine Tool DLL habe, die mir die benötigte Funktionalität kapselt. Außerdem bin ich in COM nicht so erfahren und wie immer drückt die Zeit :).
    Ist es machbar sich in einem laufenden Projekt mal eben solide COM - Kenntnisse anzueignen oder besser: ist es in dem Fall sinnvoll?

    Wie sieht es mit der Performance durch den zu vermutenden Overhead bei COM aus?

    Danke



  • Also:

    Das ganze wird über DCOM realisiert. DCOM unterstützt ein effizientes Protokoll, so dass die Datenübertragung auch sehr effizient bleibt. Das Übetragen der Daten muss sowieso geschehen. Das Verpacken der Daten kann manuell geschehen, so dass es auch sehr effizient wird. Man kann aber auch den automatischen Verpackungsalgorithmus nutzen, dürfte kaum an Effizienz verlieren. Einzig und allein die Fehlerbehandlung in COM/DCOM verringert die Effizienz, da immer Fehlercodes zurückgeliefert werden und meist eine umfangreiche Parameterabprüfung erfolgt.

    In COM heisst das übrigens anders:

    Die PCs, die die Messdaten aufnehmen, werden als Server bezeichnet. Der Client (also die Steuerapplikation) verbindet sich mit den Servern. Hier ist sogar eine sehr effektive Fernaktivierung möglich, d.h. die Anwendung zur Messdatenerfassung wird erst gestartet, wenn der Client versucht, sich mit dem Server zu verbinden. Sie wird auch automatisch beendet, sobald die Verbindung abbricht.

    Beim Client ändert sich nicht allzu viel. Die Abfrage der Server (Messdaten) sollte sowieso in mehreren Threads (also für jeden Server einer) stattfinden.

    Solide COM-Kenntnisse sind für das ganze nicht von Nöten. Bin gerade an der Entwicklung einer Client/Server-Anwendung und mit ein paar Mausklicks und nicht mehr als manuell geschriebenen 20 Zeilen Code hat man die komplette Fernaktivierung, Steuerung und das Ereignissystem realisiert.

    Gruß
    René



  • Erstmal Danke für die wie immer schnelle und ausführliche Hilfe.

    Macht DCOM Sinn bei solchen vergleichsweise simplen Anwendungen hinsichtlich Wartbarkeit und Entwicklungszeit?
    Wenn das Interface für die Serveranwendungen immer gleich bleibt gibt es da die Möglichkeit es für alle (jedes Projekt) einheitlich zu übernehmen?



  • Eine Client/Server-Anwendung ist aufgrund der häufigen Asynchronität von Funktionsaufrufen niemals 'einfach'.

    Mit den Sockets denke ich, hast Du vor, die Server zu überwachen, ob neue Messdaten zu übertragen sind und überträgst diese dann, also eine vollständige Client-Kontrolle. Du brauchst also für jeden Server einen Thread.

    Unter COM gibts die Möglichkeit, dass Server Events an den Client zurückschicken, d.h. die Erforderlichkeit des Schickens von Daten selber überwachen und dann an den Server zurückschicken. Damit wird Dein Client vergleichsweise sehr viel einfacher, der Server etwas komplizierter.

    Durch diese Modularität allerdings verbessert sich die Wartbarkeit des Systems.

    Was meinst Du mit 'Interface bleibt für Serveranwendungen immer gleich' ?



  • Naja, die Funktionalität des Servers ist immer die gleiche. d.h.:
    "Messen Start"
    "Messen Ende"
    "Daten schicken" .... u.s.w. sind ja immer gleich. Reicht es dann aus diese Funktionalität bei DCOM einmal zu entwickeln ( ähnlich wie bei Verwendung einer DLL ), oder muß die dann bei jeder Server App neu "erfunden" werden?

    Bin gerade bei Codeproject am Tutorials durchwühlen. Die Entscheidung ist wohl gerade zu Gunsten von DCOM gefallen :). Eh ich weiter meine Unwissenheit zu Schau stelle werde ich wohl erstmal ein bisschen drauf los programmen :).



  • Sicherlich, das ist ja der Sinn der Komponentenentwicklung. Einmal entwickelt, zigmal verwendet 😉



  • Um nicht gleich das Projekt zu "verstümpern" in das das ganze dann rein soll hab ich mich mal an einer kleinen Client Server Anwendung versucht. Der Server muß auf dem Clientsystem mit Regsvr32 registriert werden oder? Nun habe ich aber zwei Exes (Dialoganwendungen). Muß der Server denn nun also immer eine dll oder ein OCX sein auf die dann meine eigentliche Anwendung zugreift?

    Ich hab in der MSDN keinen Artikel gefunden wo dieser Mechanismus einmal kurz beschrieben wird. Die Tutorials auf Codeproject.com sind im Bereich DCOM leider etwas dürftig.


Anmelden zum Antworten