Guten Abend!
Ich betreibe seit einiger Zeit eine App, die auf einen eigen angefertigten Server zugreift.
Jetzt habe ich mal interessehalber eine Attacke simuliert und musste ein erschreckendes Ergebnis feststellen. Der Server geht schon bei ca. 50 gleichzeitgen Connects in die Knie.
Hier mal die Stelle, an der alles ins Rollen gebracht wird:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| procedure TServerEventHandler.OnServerExecute(AContext: TIdContext); var Cmd: String; Response: TMemoryStream; RequestHandler: TRequestHandler; begin Cmd:= Trim(AContext.Connection.IOHandler.ReadLn); RequestHandler:= TRequestHandler.Create; try Response:= RequestHandler.CreateResponse(Cmd, AContext.Connection.Socket.Binding.PeerIP); Response.Seek(0, soFromBeginning); AContext.Connection.Socket.Write(Response); AContext.Connection.Disconnect(false); finally RequestHandler.Free; Response.Free; end; end; |
Außerdem wird auch die maximale TCP-Anzahl überschritten, weshalb nach einer Weile auch die Kommunikation zum MySQL-Server abgeschnitten wird.
Wie lässt sich das nun so optimieren, dass Clients ggf. auch in eine Warteschlange eingereiht werden? Ich bin mir sicher, ihr kennt eine Menge Lösungsansätze!
Vielen Dank schonmal und noch ein schönes Wochenende,
Benny