着信 TCP 接続をできるだけ早く受け入れたいと考えています。それでも、データを受信する接続ごとに追加のスレッドが必要です。
ポートをリッスンする TThread クラスは次のとおりです。
procedure TListenThread.Execute;
var
iSize : Integer;
begin
ConnectionAttempts := 0;
while not (terminated) do begin
iSize := SizeOf(cAddr);
hClient := Accept(hServer, @cAddr, @iSize);
if (hClient <> INVALID_SOCKET) then begin
inc (ConnectionAttempts);
SynchIP := inet_ntoa(cAddr.sin_addr);
Synchronize(WriteToLog); // Processes very fast!
with TReceiveThread.Create(TRUE) do begin // This takes the longest...
FreeOnTerminate := TRUE;
hSocket := hClient;
TheForm := aForm;
Host := SynchIP;
Resume;
end;
end;
end;
end;
API のCreateThread
処理にかなりの時間がかかることがわかりました。接続をより速く受け入れる方法はありますaccept
か (したがって、ListenerThread よりも優先度が高くなります)。
たとえばaccept
、2 秒間 (サーバーが約 200 の接続を受け入れた 2 秒間で) 優先順位が最も高くなり、一度に (200) スレッドを作成する、またはそのようなものです。アドバイス、助けていただければ幸いです。
PS .: 接続が発生する前にスレッドを作成したくありません。(これにより、接続が制限され、メモリがいっぱいになります)。また、Indy から離れたいと思います。すでにテストしましたが、同じ速度のようです。