Easy Cluster ist eine DLL die es einfach macht verteiltes Rechnen in eure Anwendungen zu integrieren, bzw. Funktionen eurer Anwendungen übers Netzwerk zur Verfügung zu stellen. Auch für Fernwartungstools kann man diese Funktionen schnell und unkompliziert verwenden.
Das ganze ist geteilt in einen Master - Part, der Funktionen auf Slaves ausführen kann, und einen Slave - Part der Funktionen zur Verfügung stellt.
Features:
Beliebig viele Übergabe-Parameter
Als Übergabe Parameter stehen Long/Integer/Float/Double/Quad/Speicherblöcke zur Verfügung
Als Rückgabewerte stehen Long/Integer/Float/Double/Quad/Speicherblöcke zur Verfügung
x64 Unterstützung (ab PB 4.4 wegen Semaphorenproblem)
Events für Slave (#Master_Connect, ...) *erledigt*
Das Programm ist noch in der Entwicklung, und der Funktionsumfang wird sicher noch erweitert. Ihr dürft EasyCluster in euren Projekten verwenden solange diese Freeware/OpenSource sind. Bei kommerzieller Software/Shareware ist zuerst eine Anfrage an mich zu stellen.
Dem Download liegten ein Master/Slave Demo bei. Eine detailierte Funktionsbeschreibung zu allen Befehlen findet ihr in der Datei ECluster_inc.pbi
So, war heute den ganzen Tag beschäftigt, drum wirds die neue Version erst Sonntag Nachmittag geben. Bis dahin: Hat schon jemand den Code getestet? Gibt es Probleme?
Konnte den Code bisher nur in einem Netzwerk aus 3 XP Pro - Quad Rechnern testen, mich würde speziell interessieren ob unter Vista Probleme (UAC usw.) auftreten. Auch sonstige Wünsche/Anregungen/Bugmeldungen sind willkommen.
Für Interessierte:
Genau genommen ist dieses Bibliothek eine RPC - Variante, gekoppelt mit MultiThreading und dynamisch aufgebaut (keine fixe Parameteranzahl da Stacking usw...)
Erstmal muss ich sagen, das das ein wirklich sehr interressantes Projekt ist!
Aber ich hab in der SlaveDemo einen kleinen Fehler entdeckt:
Bei mir sagt der Debugger bei FreeMemory(*Mem) (in den CRC32- und MD5-Proceduren) immer
The specfied "*MemoryID" is not valid.
Kann aber auch sein, dass das an mir liegt, denn ich hab ein so ähnliches Problem schon bei anderen DLLs beobachtet...
mfg coder
Windows 7 x64 | PureBasic 4.60 4.50 4.02
Ja verdammt, meine Eltern wohnen immer noch bei mir!
Denke das da der PB Debugger nicht mit klarkommt wenn ein Thread aus ner DLL auf ne PB Funktion zugreifen will (besonders wenn Strings drinnen vorkommen).
Du musst einfach den Debugger deaktivieren,ThreadSave aktivieren, dann geht alles glatt. Keine Abstürze usw.
Mehr Slave Events (#Event_Master_DoJob, #Event_Master_GetServiceInfos,...)
ECluster_Slave_LogEvents(): Events ein/abschaltbar, sonst baut sich bei Silent-Servern nur ne gigantische Event-Queue auf
ECluster_Slave_Event_Job(): JobName des aktuellen Events ermitteln
Demos verbessert
Die Democodes sind jetzt inklusive GUI usw, und könnten so nun wirklich ernsthaft benutzt werden. (Nur das es eben keinen Sinn macht sich nen MD5 oder nen CRC Remote berechnen zu lassen, eher ein Bild rendern oder einen Serial validieren... ) Die Demos liegen ab jetzt auch als EXEn bei, für alle die zu faul sind den Compiler anzuwerfen
Genaue Beschreibung aller Konstanten/Funktionen usw. wie immer in der ECluster_inc.pbi
"Wahrlich es ist nicht das Wissen, sondern das Lernen, nicht das Besitzen sondern das Erwerben, nicht das Dasein, sondern das Hinkommen, was den grössten Genuss gewährt." - Carl Friedrich Gauß
Top Arbeit!
Was noch evt. nützlich sein könnte, ist eine Funktion um zu überprüfen (vom Master aus), wie viele Aufgabe noch in Queue des Slaves sind oder wie viele Threads er maximal gleichzeitig bearbeitet.
Was auch noch super wär, das sich die Master bei dem Slave anmelden müssen und die Verbindung dann verschlüsselt erfolgt, so dass nicht jeder einfach rechen Kapazitäten auf den Slaves nutzen kann. Könnte mann vlt. über Callbacks regeln, aber das ist nicht so wichtig...
mfg coder
Windows 7 x64 | PureBasic 4.60 4.50 4.02
Ja verdammt, meine Eltern wohnen immer noch bei mir!
coder hat geschrieben:Top Arbeit!
Was noch evt. nützlich sein könnte, ist eine Funktion um zu überprüfen (vom Master aus), wie viele Aufgabe noch in Queue des Slaves sind oder wie viele Threads er maximal gleichzeitig bearbeitet.
Ist schon für die nächste Version geplant.
Es gibt kein maximales Limit, theroretisch ist die Anzahl der Jobs nur durch den Arbeitsspeicher + SwapDatei begrenzt. Der Slave arbeitet immer nur mit so vielen Threads wie du vorher eingestellt hast, alle anderen Jobs warten solange in einer Queue. (siehe JobQueue)
Das mit der Authentifizierung hab ich mir schon überlegt, aber hab mir dann gesagt das man das ja auch in den Service-Proceduren intern lösen kann. Also das man zuerst z.B. "MyService_Authentificate" aufrufen muss, und nur wenn der Job die gesendeten User-Daten akzeptiert kriegt man ein Handle mit dem man weiterarbeiten kann usw.... .