Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.035 Beiträge
Delphi 12 Athens
|
AW: DataSnap - Connection-Probleme
5. Dez 2011, 18:11
Manuelle Keep-Alive-Anfragen wären nicht das Problem, aber das Problem ist, daß der DSClient, sowie der DSServer die Connections dann nicht richtig schließt, womit die damit zusammenhängenden Klassen nicht freigegeben werden (Speicherlecks) und der Server hat auch noch ein Problem, da er beim Shutdown nochmal (automatisch) mit allen "registrierten" Callbacks Verbindung aufnimmt, um denen zu sagen "so, ich geh dann mal, wäre gut, wenn du dich deaktivierst ... oder so".
Wenn man mit den automatisch generierten Klassen arbeiten will (in unserem alten/aktuellen AppServer hab ich eigentlich alles selber gemacht und die Generatoren gemieden), und nicht bei jeder Änderung seine "bugfixes" neu einbauen will,
dann hab ich bis jetzt nur eine "praktikable" Lösung entdeckt:
- keine (verbuggten) Callbacks .. stattdessen regelmäßiges Pollen (wie gesagt, dank einer Authentifizierung eh nicht nutzbar)
- das komplette Servermodul wird manuell erstellt
und zwar vor einem jeden Methodenaufruf und danach wird sofort die Verbindung wieder freigegeben, also das komplette Datenmodul freigegeben, da ein Reconnect nach einem Verbindungsabbruch nicht correkt möglich ist, außerdem ist, dank der kurzen Verbindungen, die Chance geringer, daß eine Verbindung abbricht, was den Server stabiler laufen läßt.
Es sei denn man baut eben die automatisch generierten Clientklassen jedes Mal um > disconnect in (nach) jedem Methodenaufruf und die ClientMethodenKlassen werden vor jedem Aufruf neu erstellt.
Und das war bis jetzt die einzigeste Möglichkeit, damit Server und Client über lange Zeit / viele Aufrufe stabil läuft.
Und ja, wir sind seit letzer Woche dran, alle möglichen (uns auch nur im Traum einfallenden) Szenarien durchzuspielen, um die Funktion irgendwie zu stören, um möglichst Alles zu testen.
Wir haben halt in unserem großen AppServer immer wieder "unerklärliche" Problem.
Ist schon witzig, daß von 10000 schnell aufgerufenen leichtgewichtigen Heavyweight Callbacks "nur" 9500 ankommen ... je mehr Clienten, um so mehr verschwindet und irgendwann verabschieden sich sogar die Callbckverbindungen still und heimlich (kommt nix mehr an, obwohl angeblich aktiv).
Ach ja, das gesammte Projekt auf XE2 umszustellen kommt aktuell nicht in Frage.
Wir haben jetzt schon fast ein Jahr benötigt, um von D7 auf XE umzustellen, dazu noch den alten (komplett selbstbebastelten) Apps auf DataSnap und es läuft immernoch nicht alles ordnungsgemäß.
Erkläre jetzt mal den Kunden: Tut uns leid, aber das nächste halbe Jahr wird wieder nix, da wir nochmal alles umstellen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
Geändert von himitsu ( 5. Dez 2011 um 18:18 Uhr)
|