Wt (Witty) + Apache + Fastcgi

Я пытаюсь понять, как сеансы управляются Wt при использовании его через разъем fastcgi и apache в качестве динамического скрипта fastcgi. Мой wt_config.xml используется по умолчанию. Я ничего не менял, поэтому текущие параметры Wt для управления процессами и потоками являются значениями по умолчанию:

<server>
  <application-settings location="*">
    <session-management>      
      <!--
        <dedicated-process>
          <max-num-sessions>100</max-num-sessions>
        </dedicated-process>
      -->

      <shared-process>
        <num-processes>1</num-processes>
      </shared-process>

      // Others....
    </session-management>

    <connector-fcgi>
      <num-threads>1</num-threads>
      // Others....
    </connector-fcgi>

    // Others...
  </application-settings>
</server>
  • С такой конфигурацией сколько процессов у меня будет? Только один на все сеансы? Или только один для каждого нового сеанса? Что здесь означает shared-process?

  • Если бы я использовал свое приложение, например, в качестве чата, используя push-уведомления сервера для обновления содержимого, разве у меня не возникли бы проблемы, если у меня одновременно запущено более одного процесса? (поскольку разные клиенты могут подключаться к разным процессам).


person Peregring-lk    schedule 22.12.2015    source источник


Ответы (1)


Когда приложение Wt работает под Apache с коннектором FastCGI, сначала запускается процесс диспетчеризации Wt FastCGI. Этот процесс получает запросы FastCGI от веб-сервера и перенаправляет их рабочим процессам, которые фактически выполняют работу вашего приложения. Количество рабочих процессов контролируется опцией shared-process. Он называется общим, потому что количество активных сеансов Wt может в конечном итоге превысить количество рабочих процессов. В этом случае диспетчерский процесс пытается равномерно распределить новые сеансы Wt между рабочими процессами.

В отличие от варианта shared-process, при использовании dedicated-process новый рабочий процесс будет запускаться для каждой новой сессии Wt.

Push-события, отправленные WServer::post или WServer::postAll, будут доставлены только в сеансы Wt в рамках текущего процесса. Если вы хотите публиковать события во всех сеансах Wt во всех процессах, вам следует реализовать некий пользовательский механизм межпроцессного взаимодействия.

Я обсуждал это здесь: http://redmine.webtoolkit.eu/issues/2897

person hank    schedule 12.01.2016