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.locklist
e 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;