最近在开发一个网络TCP服务器的时候, 运行至后期客户端多时遇到一个效率问题.由于服务器端使用了TThreadList来保存客户端的socket句柄, 每次有客户端连接时,
  TThreadList.add(nClinetSocket);有数据时,在发送TThreadList.lock;for i= 0 to count-1 do
begin
  sendPack(XXXXXXXXXXXXXXX);
end;TThreadList.Unlock;

效率很低.  各位高手们, 有没有更好的机制提高这种效率呢, 既保证socket句柄的安全性, 又能提高效率.

解决方案 »

  1.   

    首先这个不是语言的问题。这个需要用SOCKET端口模型,现在比较流行的是:
    1、每个SOCKET开一个线程,类如INDY,每个服务器大概能支持到200-500左右;
    2、使用完成端口,这个需要自己编码实现,每个服务器可以支持2000以上,当然具体效率还受限于IO和带宽。
      

  2.   

    我现在的问题是在socket句柄管理上, 以及发送效率上.  我使用的网络模型是DXsocket, 它使用的是线程池模式.
      

  3.   

    完成端口也是管理SOCKET句柄的一种机制,如果有线程池,楼主应该尽量避免这种调用
    TThreadList.lock;for i= 0 to count-1 do
    begin
    sendPack(XXXXXXXXXXXXXXX);
    end;你这样做,就相当于是全串行。