Autor Beitrag
Narses Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 9557
Erhaltene Danke: 862

W2k .. W7pro
TP3 .. D7pro .. D10.1
BeitragVerfasst: So 09.09.12 13:58 
Moin!

user profile iconPseudo hat folgendes geschrieben Zum zitierten Posting springen:
Wie kann ich den Server multithreaden
Kurz gesagt: gar nicht. :nixweiss: Was du aber machen kannst: den kompletten Server in einen eigenen Thread auslagern, diesen nur für die Kommunikation verwenden (dafür reicht die Performance alle mal aus, die eigentliche Arbeit macht eh die WSA) und die Daten an Client-Worker-Threads durchzureichen. :idea:

Der Schlüssel für einen eigenen Server-Thread (klar, am Besten mit dem TNBFPAServer) ist der wirklich geradezu geniale TMessageThread :beer: von user profile icondelfiphan.

user profile iconPseudo hat folgendes geschrieben Zum zitierten Posting springen:
Ich hab dazu bis jetzt nicht viel im Internet gefunden...
Das ist auch nicht verwunderlich. ;) Theoretisch kann der TServerSocket auch Multithreading, aber ich habe es aufgegeben herausfinden zu wollen, wie man das machen muss. Ich blicke nicht durch, was die Entwickler sich damals dabei wohl gedacht haben... :?!?: Gibt es jemanden, der das jemals geschafft hat? Wenn ja, bitte unbedigt bei mir (oder hier) melden! :lupe:

user profile iconPseudo hat folgendes geschrieben Zum zitierten Posting springen:
Und die Indys kann ich nicht leiden (unter anderem auch weil man nur eine Zeile übertragen kann?!?).
Zunächst mal: selbstverständlich kann der Socket-Wrapper (IOHandler oder so heißt das dort) der Indies auch mehr als "eine Zeile" senden (du kannst ja auch mit Streams arbeiten), aber du scheinst da was mit den Methoden zur Unterstützung von zeilenorientierten Protokollen nicht verstanden zu haben. :zwinker:

Leider muss ich aber sagen: wenn du einen "echten" Multithreaded-Server in Delphi haben willst, schätze ich ist der TidTCPServer vermutlich alternativlos. :nixweiss:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Pseudo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16
Erhaltene Danke: 1



BeitragVerfasst: So 09.09.12 15:12 
Also ich kann veröffentlichen was ich bisher rausgefunden habe (wenig...):

Es gibt eine GetThread Procedure in der Server Komponente,
sie hat als einen "var"-Parameter (also ein call by reference) einen "TServerClientThread",
diesen muss man selbst coden (also per Thread Klasse)...

Mehr auch nicht...


Pseudo

EDIT:

Ich hab noch mehr rausgefunden, und werde vlt. wenn ichs hinkriege ein Tutorial dazu erstellen, aber ich würde gerne wissen, was die Borland Entwickler beim entwickeln der Komponente genommen haben O.o

Pseudo
Schwedenbitter
Hält's aus hier
Beiträge: 15

Windows 10

BeitragVerfasst: Do 08.12.16 16:29 
Also mal völlig an den letzten Themen vorbei :wink: :

Ich bin gerade damit befasst, anhand des Tutorials das ganze für die Indys nachzubauen. Scheinbar ist es mir gelungen, über Umwege endlich auch einen AnsiString binär zu übertragen. Jetzt stehe ich aber vor folgendem "Problem":

Da Delphi ja (hoffentlich) nicht ohne Grund der Windows-Welt gefolgt ist und - sofern ich das richtig verstanden habe - WideString als Standard benutzt, möchte ich die mit reinbasteln - und das betrifft auch die NarsesBFPA.pas.
Bevor ich nun stundenlang durch Versuch und Irrtum eine Lösung finde, frage ich mal, ob folgender Code tendenziell funktionieren sollte:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
// einen AnsiString hinzufügen -------------------------------------------------
Procedure TCmdSeq.Add(Const Value: AnsiString);
Begin
  Add(PAnsiChar(Value)^, Length(Value));        // auf Buffer-Methode umbiegen
End;

// einen String hinzufügen -----------------------------------------------------
Procedure TCmdSeq.Add(Const Value: String);
Begin
  Add(PChar(Value)^,                    // auf Buffer-Methode umbiegen
    Length(Value) * SizeOf(Char));          // wegen 2-Byte-Character
End;

Gruß, Alex
Narses Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 9557
Erhaltene Danke: 862

W2k .. W7pro
TP3 .. D7pro .. D10.1
BeitragVerfasst: Fr 09.12.16 17:12 
Moin!

user profile iconSchwedenbitter hat folgendes geschrieben Zum zitierten Posting springen:
Bevor ich nun stundenlang durch Versuch und Irrtum eine Lösung finde, frage ich mal, ob folgender Code tendenziell funktionieren sollte:
Ich rate dringend davon ab, den hier gezeigten Ansatz (konkret: Strings als binärer Datencontainer) in Delphi-Versionen >7 zu verwenden! Dieser "Trick" (Ausnutzen der String-Compiler-Magic) funktioniert nur bis D7, so ist das Leben. Oberhalb von D7 sind meine Tutorials nur noch als Ideenquelle nutzbar. :nixweiss:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.