| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Для новичков > Многопользовательский режим работы проги |
| Автор: Pcrepair 26.4.2012, 12:26 |
| Добрый день. Есть программа, написанная в стиле процедурного програмированния в РАД2010: - программа имеет GUI (МЕМО1, МЕМО2, Кнопка и дополнительно настройка алгоритма обработки) - пользователь вводит исходные данные в окно ввода МЕМО1, нажимает кнопку - программа обрабатывает данные по сложному алгоритму, зависящему от введенных пользователем данных (текст) - программа выводит результат работы в МЕМО2 на это цикл работы программы заканчивается В ближайшее время кнопка и МЕМО1,2 будут вынесены в ВЕБ-интерфейс (ВЕБ-сервер на одном хосте в просторах интернета) и пользователь будет подключаться к программе как к удаленному сервису через браузер. на текущий момент и после подключения ВЕБ-интерфейса программа одномоментно может работать только с одним пользователем, демо-версия Вопрос: каким образом можно ввести многопользовательский режим: - каждый пользователь получает свою сесссию на ВЕБ-сервере, это понятно - каждый пользователь должен получить на сервере приложения свой поток? в общем как перевести программу написанную для работы с одним пользователем в многопользовательский режим? какие для этого существуют способы? |
| Автор: Snowy 26.4.2012, 12:40 |
| если у каждого пользователя свой поток, то не вижу проблемы... |
| Автор: Pcrepair 26.4.2012, 13:21 |
| так что? нужно переписать код с использованием потоков? |
| Автор: Snowy 26.4.2012, 13:28 |
| Зависит от того, как программа будет работать в веб-сессиями. Если, например, как модуль к аппачу, то не нужно ничего переделывать - аппач сам выдаст отдельный тред. Если, как cgi, то опять же ничего переделывать не нужно - будет запущено несколько экземпляров программы. Если же программа сама будет веб-сервером, то просто вызов процедур нужно будет осуществлять из треда - без использования глобальных переменных проблем не возникнет. Для начала нужно определиться как прикрутить программу к серверу. |
| Автор: Pcrepair 26.4.2012, 13:38 |
| программа вообщето на отдельном сервере приложений, написана на ДЕЛФИ. сервер находится в одном городе, в одном здании, в одной комнате, подключен к интернету сервер периодически подключается к веб-серверу(апач конечно, на каком нибуть дешевом хосте где то в просторах интернетума) к ЧАТу, смотрит, нет ли запроса от пользователя ту да же подключается пользователь, вводит в окно ввода текст и нажимает большую красную кнопку (ранее известную как "кракер интернета") сервер получает задачу, решает задачу и отсылает данные взад, в ЧАТ где пользователь их видит, на ХТМЛ странице пока все это работает в однопользовательском режиме, пока текущий пользователь не закончил сессию, другой пользователь не можеи получить доступ к серверу приложений, который находится...... теперь то понятно о чем идет речь? |
| Автор: Snowy 26.4.2012, 14:22 |
| Ну в данном варианте получается, что сервер - это апач в интернете. А приложение является клиентским по отношению к апачу. В этом случае нет никакой необходимости создавать несколько тредов. Можно просто последовательно обработать несколько запросов. |
| Автор: Pcrepair 26.4.2012, 14:42 |
| нет, апач - это апач, на котором установлен ЧАТ к ЧАТу подключается пользователь и вводит задание к ЧАТу подключается сервер приложений берет и обрабатывает задание решив задание, сервер приложений отправляет результат в ЧАТ так понятно? |
| Автор: Snowy 26.4.2012, 15:05 |
| В данном случае сервер приложений является клиентом чата. А раз он клиент, то многопоточность ему не нужна, т.к. он непосредственно не должен держать несколько сессий. |
| Автор: Pcrepair 26.4.2012, 15:14 |
| как раз именно несколько сессий(заданий) клиент ЧАТа и должен выполнять чтоб пользователи не видели таблички "ЗАНЯТО", которая обязательно будет поскольку цикл обработки задания может зпнимать от нескольких минут до нескольких часов |
| Автор: Snowy 26.4.2012, 15:30 |
| Ну тогда тебе нужен отдельный дежурный поток, который будет загружать страничку чата и добавлять задания в очередь. А основной поток будет брать задания из очереди, выполнять. Для ускорения процесса можно конечно создать несколько обрабатывающих потоков - по количеству процессоров, чтобы нагрузить на полную. Поскольку структура процедурная, то нужно всего лишь вызвать процедуру из контекста треда. Но это детали. Главное - создать дежурный тред, который будет ставить задания в очередь. |
| Автор: Pcrepair 26.4.2012, 15:33 |
| то есть нужно изучить и использовать Classes.TThread? может еще какие косяки известны? по потокам |
| Автор: Snowy 26.4.2012, 16:44 |
| Всё необходимое есть тут: http://forum.vingrad.ru/forum/topic-60076.html |
| Автор: Pcrepair 26.4.2012, 16:52 |
| Спасибо! |