Indy 10 servidor TCP

Después de mucha búsqueda, pensé que el servidor Indy TCP sería el mejor para usar en el servidor de mensajería instantánea en el que estoy trabajando. El único problema al que me enfrento ahora es transmitir y reenviar un mensaje a otro cliente conectado, el envío de la respuesta al mismo cliente parece correcto y no interrumpe la actividad de otros clientes, pero para reenviar mensajes a otros clientes, el mecanismo que conozco es mediante el uso de laaContext.locklist, e iterando entre la lista de conexiones para encontrar la conexión del cliente que va a recibir los datos.

El problema aquí es que congela la lista y no procesa las solicitudes de otros clientes hasta que se llama a la lista de desbloqueo. ¿Entonces no perjudicará el rendimiento del servidor? Bloquear la lista e iterar entre las conexiones para reenviar cada mensaje (ya que esto es lo que sucede muy a menudo en un mensajero). ¿Hay alguna manera mejor de hacer esto?

Estoy usando Indy 10 y Delphi 7

Código de emisión:

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 reenviar mensaje:

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;

Respuestas a la pregunta(1)

Su respuesta a la pregunta