Servidor TCP Indy 10

Depois de muita pesquisa eu pensei servidor Indy TCP seria o melhor para usar no servidor de mensagens instantâneas que eu estou trabalhando. O único problema que estou enfrentando agora é transmitir e encaminhar mensagens para outro cliente conectado, enviando de volta a resposta para o mesmo cliente parece ok e não desliga a atividade de outros clientes, mas para encaminhar mensagem para outros clientes o mecanismo que eu conheço é usando oaContext.lockliste iterando entre a lista de conexões para localizar a conexão do cliente que receberá os dados.

O problema aqui é que ele congela a lista e não processa outras solicitações de clientes até que a lista de desbloqueio seja chamada. Então, isso não prejudicará o desempenho do servidor? bloqueando a lista e iterando entre conexões para encaminhar cada mensagem (como é o que acontece com muita frequência em um messenger). Existe alguma maneira melhor de fazer isso?

Eu estou usando Indy 10 e Delphi 7

Código para transmissão:

Var tmpList: TList;
    i: Integer;
Begin
tmpList := IdServer.Contexts.LockList;

For i := 0 to tmpList.Count Do Begin
  TIdContext(tmpList[i]).Connection.Socket.WriteLn('Broadcast message');
End;
IdServer.Contexts.UnlockList;

Código para encaminhar mensagem:

Var tmpList: TList;
  i: Integer;
Begin
  tmpList := IdServer.Contexts.LockList;

  For i := 0 to tmpList.Count Do Begin
    If TIdContext(tmpList[i]).Connection.Socket.Tag = idReceiver Then
      TIdContext(tmpList[i]).Connection.Socket.WriteLn('Message');
  End;
  IdServer.Contexts.UnlockList;

questionAnswers(1)

yourAnswerToTheQuestion