Indy 10 TCP Server

Nach langem Suchen dachte ich, dass der Indy TCP-Server der beste für den Instant Messenger-Server ist, an dem ich arbeite. Das einzige Problem, mit dem ich im Moment konfrontiert bin, ist das Senden und Weiterleiten von Nachrichten an andere verbundene Clients. Das Zurücksenden von Antworten an denselben Client scheint in Ordnung zu sein und hängt nicht die Aktivität anderer Clients auf, aber für das Weiterleiten von Nachrichten an andere Clients den mir bekannten Mechanismus ist durch die Verwendung deraContext.locklistund Iterieren zwischen der Verbindungsliste, um die Client-Verbindung zu finden, die die Daten empfangen soll.

Das Problem hier ist, denke ich, dass es die Liste einfriert und nicht andere Client-Anforderungen verarbeitet, bis die Unlocklist aufgerufen wird. Beeinträchtigt es also nicht die Leistung des Servers? Sperren der Liste und Iterieren zwischen Verbindungen zum Weiterleiten jeder Nachricht (wie dies in einem Messenger sehr häufig vorkommt). Gibt es einen besseren Weg, dies zu tun?

Ich benutze Indy 10 und Delphi 7

Code für die Ausstrahlung:

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;

Code für die Weiterleitung der Nachricht:

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;

Antworten auf die Frage(1)

Ihre Antwort auf die Frage