如何快速接受TCP连接并同步我的GUI?

Ben*_*iss 1 delphi vcl winsock delphi-xe4

我希望尽可能快地接受传入的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;
Run Code Online (Sandbox Code Playgroud)

我发现API CreateThread需要很长时间才能处理.有没有办法更快地接受连接(所以accept优先级高于ListenerThread)?

例如,accept具有2秒的最高优先级(在服务器已经接受大约200个连接的2秒内)然后立即创建(200)线程,或类似的东西.建议,帮助将不胜感激.

PS.:我不想在连接发生之前创建任何线程.(这会限制连接并填充内存).我也想远离Indy - 我已经测试了它,它似乎是相同的速度.

Rem*_*eau 5

Indy有什么问题?它附带Delphi,它的TIdTCPServer组件可以满足您的一切需求.它接受每个侦听端口使用单独的工作线程的新连接,因此主线程不等待.每个接受的客户端都在自己的工作线程中运行 并且可以选择合并客户端线程(尽管您认为,池不必限制您可以接受的连接数,只允许在任何给定时刻等待重用的线程空闲的数量).

如果您遇到速度问题,请随时向Indy的开发人员报告.我怀疑你的速度问题可能与你如何使用它有关,而不是与它本身有关.