AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Client/Server. Pakete schneller abarbeiten.
Thema durchsuchen
Ansicht
Themen-Optionen

Client/Server. Pakete schneller abarbeiten.

Ein Thema von Jackie1983 · begonnen am 15. Jul 2009 · letzter Beitrag vom 4. Aug 2009
Antwort Antwort
Jackie1983

Registriert seit: 12. Mär 2007
486 Beiträge
 
#1

Client/Server. Pakete schneller abarbeiten.

  Alt 15. Jul 2009, 10:59
Servus,

habe gerade mal meine Client - Server Anwendung getestet.
Soweit so gut. Funktioniert wunderbar.

Dann wollte ich mal wissen was da noch so geht und habe die Anwendung mal auf die Spitze gebracht.

Wenn ein Paket vom Client zum Server gesendet wird, wird zu erst ein Ping gesendet, dann x sekunden gewartet, kommt kein Pong vom Server wird die Verbindung getrennt und neu aufgebaut.
Wenn ein Pong kommt Paket senden.

Am Server kommen alle Pakete auser Ping in einen JobThread. Der Ping wird direkt beantwortet. Alle Daten befinden sich in einer TObjectlist. Diese wird dann in einer schleife abgearbeitet.

Der Test.
60 Clients wurden gestartet.
Jeder Client sendet pro Sekunde einen Testpaket.

Die letzten Clients trennen die Verbindung weil sie kein Pong bekommen.
Bauen die Verbindung neu auf und senden dann die Daten nach einer Zeit bekommen die Clients wieder kein Pong und trennen die Verbindung, sind aber immer nur die letzten Clients.

Hier mal ein wenig Code vom Server, dann kann man sich das besser vorstellen.
Delphi-Quellcode:
  SetLength(sBuffer,Socket.ReceiveLength);
  Socket.ReceiveBuf(PChar(sBuffer)^,Length(sBuffer));

  //Sammeln von Jobs bis diese komplett sind
  index := fBufferJobs.IndexOfObject(socket);
  if index = -1 then
  begin //noch kein job vorhanden
    fBufferJobs.AddObject(sBuffer,socket);
    index := fBufferJobs.Count-1;
  end else //unvollständiger job vorhanden
    fBufferJobs.Strings[index] := fBufferJobs.Strings[index] + sBuffer;

  s := fBufferJobs.Strings[index];

    while s <> 'do
    begin
      cmdSize := PCardinal(@s[1])^;
      if length(s) < cmdSize then break;

      sJob := copy(s,1,cmdSize);
      Delete(s,1,cmdSize);

      fBufferJobs.Strings[index] := s; //rest wieder zurück
      if s = 'then begin //leer, dann löschen
        fBufferJobs.Objects[index] := nil;
        fBufferJobs.Delete(index);
      end;

      cmd := TCommandHandling.Create(CMDNone);
      cmd.SetFrames(sJob);
      case cmd.GetCmd of
        SYS_ALIVE : begin
          cd := fClientManager.Get(socket);
          //...
        end;
        SYS_PING : begin
          Pong := TCommandHandling.Create(SYS_PONG);
          Socket.SendBuf(PChar(pong.SendFrames)^,Length(pong.SendFrames));
          pong.Free;
        end;
        SYS_AUTHKEY : begin
          //...
        end;
      else //kein systembefehl weiter bearbeiten
        fJobThread.AddJobToSocket(socket,sJob);
      end; //case
      cmd.free;
    end; //while
Kann mir gut vorstellen das die Sammelmethode oben Probleme macht und die letzten Clients immer Probleme haben.
Was meint ihr?

Ich könnte ja noch die Möglichkeit nutzen die Daten aufzuteilen und 2 oder 3 Threads zu bearbeiten. Dann kommt aber noch das Synchronisieren der Threads und ich denke da wird es bei mir auch noch Probleme geben.

Mfg
  Mit Zitat antworten Zitat
Jackie1983

Registriert seit: 12. Mär 2007
486 Beiträge
 
#2

Re: Client/Server. Pakete schneller abarbeiten.

  Alt 4. Aug 2009, 13:24
keiner ne idee wie man sowas schneller machen könnte?
Oder ist das alles zu unübersichtlich?
  Mit Zitat antworten Zitat
Antwort Antwort


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 03:11 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz