AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke ActiveDesktop / XMLHTTPRequest versus HTTP Server
Thema durchsuchen
Ansicht
Themen-Optionen

ActiveDesktop / XMLHTTPRequest versus HTTP Server

Ein Thema von hirnstroem · begonnen am 3. Jan 2011 · letzter Beitrag vom 4. Jan 2011
 
hirnstroem

Registriert seit: 21. Sep 2005
297 Beiträge
 
Delphi 2006 Professional
 
#1

ActiveDesktop / XMLHTTPRequest versus HTTP Server

  Alt 3. Jan 2011, 09:15
Hallo Forum,

mittels untenstehendem HTML/JavaScript wird in bestimmten Intervallen eine Verbindung zu einer Delphi Applikation aufgebaut und auf einkommende Daten gewartet, welche, wenn angekommen, in den "Body" geschrieben werden:

Code:
<HTML>
  <HEAD>
    <SCRIPT>
      function refresh() {
        var request = new ActiveXObject('MSXML2.XMLHTTP.3.0');
        request.open("POST", "http://[HOST_NAME]:[PORT]/", true);
        request.onreadystatechange=function () {
          if (request.readyState==4) {
            document.body.innerHTML = request.responseText;
          }
        }
        request.send(null);
        setTimeout("refresh()", [INTERVAL]);
      }
    </SCRIPT>
    <STYLE>BODY { color:white;background-color:black; }</STYLE>
  </HEAD>
  <BODY ONLOAD="refresh()">
  </BODY>
</HTML>
Die Delphi Applikation ist mit einem HTTP Server (TIdHTTPServer) bestückt, welcher auf das "OnCommandGet" Ereigniss reagiert und Daten retourniert:

Code:
procedure TfrmMain.HTTPServerCommandGet(AContext: TIdContext; ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
begin
  AResponseInfo.ContentText := Response.Text;
end;
Die Gewünschte Funktionalität ist soweit gewährleistet, nur - und das ist unschön - sind stets sehr viele (ca. 100) Verbindungen mit dem Status "TIME_WAIT" festzustellen (mittels TCPView aus der Sysinternals Suite). Die Anzahl Verbindungen mit Status "TIME_WAIT" wächst nicht ständig weiter, sondern pendelt sich irgendwann ein. Zudem scheint der Windows Explorer den Arbeitsspeicher aufzublähen.

Auf welche Art und Weise können/sollen/müssen die Verbindungen nach der Übertragen geschlossen werden? Da das XMLHTTPRequest Objekt keine Funktion für das Schliessen der Verbindung anbietet, wird dies wohl auf Serverseite geschehen müssen. Auf Serverseite tritt aber bereits ohne weiteres zutun in demselben Intervall, in welchem die Anfragen einkommen, das OnDisconnect Ereigniss auf. Wird die Verbindung "von Hand" geschlossen tritt eine "EIdConnClosedGracefully" Exception mit der Meldung "Connection Closed Gracefully" auf.

Grüsse
hirnstroem
inde deus abest
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:11 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz