Глубины Indy


Модели серверов


Есть два пути построения TCP серверов: с командными обработчиками и с событиями OnExecute. Командные обработчики делают построение серверов много проще, но не во всех ситуациях.

Командные обработчики удобны для протоколов, которые обмениваются командами в текстовом формате, но не очень удобны для протоколов, которые имеют команды двоичной структуры или совсем не имеют командной структуры. Большинство протоколов текстовые и могут использоваться командные обработчики. Командные обработчики полностью опциональны. Если они не используются сервера Indy продолжают использовать старые методы. Командные обработчики рассмотрены в деталях в главе «Командные обработчики».

Некоторые протоколы являются двоичными или не имеют командной структуры и не пригодны для использования командных обработчиков. Для таких серверов должно использоваться событие OnExecute. Событие OnExecute постоянно вызывается пока существует соединение  и передает соединение, как аргумент. Реализация очень простого сервера с использованием события OnExecute выглядит так:

procedure TformMain.IdTCPServer1Execute(AThread: TIdPeerThread);

var

  LCmd: string;

begin

  with AThread.Connection do

  begin

    LCmd := Trim(ReadLn);

    if SameText(LCmd, 'QUIT') then

    begin

      WriteLn('200 Good bye');

      Disconnect;

    end

    else if SameText(LCmd, 'DATE') then

    begin

      WriteLn('200 ' + DateToStr(Date));

    end

    else

    begin

      WriteLn('400 Unknown command');

    end;

  end;

end;

здесь нет необходимости проверять действительность соединения, так как Indy делает это автоматически. Так же нет необходимости производить опрос, поскольку и это Indy делает автоматически за вас. Она вызывает событие периодически, пока соединение не прекратится. Это может быть вызвано или явным отсоединением, или по сетевой ошибке, или если клиент отсоединился. В действительности, не требуется делать никаких опросов на предмет отсоединений. Если данный опрос все же необходимо делать, вам надо только позаботиться об возбуждении исключений, что бы Indy смог нормально их отработать.




Начало  Назад  Вперед