TCP-сервер Indy 10
После долгих поисков я подумал, что Indy TCP-сервер будет лучшим для использования на сервере мгновенных сообщений, над которым я работаю. Единственная проблема, с которой я сейчас сталкиваюсь, - это рассылка и пересылка сообщения другому подключенному клиенту, отправка ответного ответа тому же клиенту выглядит нормально и неЯ вешаю активность других клиентов, но для пересылки сообщений другим клиентам я знаю механизм, использующийaContext.locklist
и перебирая список соединений, чтобы найти клиентское соединение, которое должно принимать данные.
Проблема здесь, я думаю, в том, что она замораживает список и не• обрабатывать запросы других клиентов, пока не будет вызван список разблокировки. Так не повредит ли это производительности сервера? блокировка списка и итерация между соединениями для пересылки каждого сообщения (поскольку это часто происходит в мессенджере). Есть ли лучший способ сделать это?
Я использую Indy 10 и Delphi 7
Код для трансляции:
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;
Код для пересылки сообщения:
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;