Hi,
Bin gerade eine Serveranwendung am programmieren und habe mir zu Testzwecken ein zweites Programm gebaut, welches beliebig viele Clients auf den Server hetzt und den Server etwas beschäftigt.
Mein Server (Konsolenanwendung) sieht quasi so aus (Vom Aufbau her):
Delphi-Quellcode:
procedure TMeinWSocketServer.Listen;
begin
FServerSocket.Listen; //FSocketSever: TWSocketServer
while not FClosed do
begin
FServerSocket.ProcessMessages; // Ansonsten können keine Verbindungen etc verarbeitet werden.
sleep(1); // Ist ungefähr das gleiche wie Application.ProcessMessages
end;
end;
procedure Eingabe;
var cmd: String;
begin
repeat
readln(cmd);
until cmd = 'exit';
end;
var ServerSocket: TMeinWSocketServer; // Kapselt den TWSocketServer
begin
// Pseudo-Code
ServerSocket.Erstellen;
ServerSocket.Initialisieren;
NeuerThread(@Eingabe);
ServerSocket.Listen;
end;
Ich weiß nicht wie viel detailierten Code ihr noch braucht. Sagt einfach bescheid.
Mein 2. Programm hetzt dann eben beliebig viele Clients auf meinen Server. Im TEstfall 200. Dann starte ich eine neue Instanz des 2. Programms und hetze wieder 200 Clients auf den Server. Davon kommen meistens 8-15 Clients durch. Alle anderen eingehenden Verbindungen werden irgendwie verschluckt...
Man muss dazu sagen, dass der Server in dem Moment wo zum 2. mal 200 neue CLients dazukommen von den 1. 200 gut beschäftigt wird.
Ich schätze einfach der ServerSocket ist zu beschäftigt.. Keine Ahnung.. Aber ich weiß auch nicht wie ich das verhindern oder wie ich darauf reagieren soll.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."