On Mon, 27 Sep 1999 jadream@xxxxxxx wrote:
> From: jadream@xxxxxxx
> Subject: Re: [apache-talk] Are long connections possible?
> X-Mailer: Mozilla 4.04 [en] (WinNT; I)
>
>
>
> Alex Tutubalin wrote:
>
> > BTW, а нужно ли хранить эту информацию на сервере ? Мне казалось,
> > что раз клиенту надо, то на нем и надо хранить :)
> >
> > Alex
>
> Увы! Каждый сеанс имеет свои данные и соответственно свою реакцию на совершенно
> одинаковые запросы. Можно, конечно, всю информацию хранить в БД, но уж очень
> медленно будет работать.
Можно сделать так: написать брокер транзакций в виде отдельного процесса,
который будет запускать процесс, собственно обрабатывающий транзакции
и выдавать пользователю ID транзакции (в куке или в виде hidden поля в
форме) . Все копии апача будут коннектиться к этому брокеру через сокет
или fifo и отдавать ему id сессии или просьбу создать новую сессию.
Брокер пишется на perl или на tcl строчек в двадцать, если не особенно
заморачиваться интеллектуальной сборкой мусора.
Теперь то же самое, только без кошки
Получив запрос от пользователя на создание новой сессии, apache запускает
долгоживущий процесс,
который создает unix-domain-socked с уникальным именем или открывает
tcp-сокет с уникальным номером и слушает его. Имя/номер передается клиенту
в качестве id процесса.
Если в любую копию apache приходит запрос, содержащий id сессии, то
очевидно, она уже знает, с кем коннектиться.
Еще вариант - поставить Apache::ASP, который использует dbm-файлы (если не
ошибаюсь) для хранения контекста сессии. Еще вариант - использовать общую
память в scoreboard (на www.modperl.com что-то было на эту тему) для
хранения контекста сессии.
Хотя, конечно, самый прямолинейный вариант - гонять _весь_ контекст сессии
туда-сюда через cookie или hidden-поля.
--------------------------------------------------
Victor Wagner vitus@xxxxxx
Programmer Office:7-(095)-203-51-19
Institute for Commerce Home: 7-(095)-135-46-61
Engineering http://www.ice.ru/~vitus
=============================================================================
= Apache-Talk@xxxxxxxxxxxxx mailing list =
Mail "unsubscribe apache-talk" to majordomo@xxxxxxxxxxxxx if you want to quit.
= Archive avaliable at http://www.lexa.ru/apache-talk =
"Russian Apache" includes software developed
by the Apache Group for use in the Apache HTTP server project
(http://www.apache.org/) See
Apache LICENSE.
Copyright (C) 1995-2001 The Apache Group. All rights reserved.
Copyright (C) 1996 Dm. Kryukov; Copyright (C)
1997-2009 Alex Tutubalin. Design (C) 1998 Max Smolev.