![]() |
|
Модераторы: Snowy, MetalFan, bems, Poseidon |
![]()
|
|
| Pcrepair |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 209 Регистрация: 16.1.2011 Репутация: нет Всего: нет |
Добрый день. Есть программа, написанная в стиле процедурного програмированния в РАД2010:
- программа имеет GUI (МЕМО1, МЕМО2, Кнопка и дополнительно настройка алгоритма обработки) - пользователь вводит исходные данные в окно ввода МЕМО1, нажимает кнопку - программа обрабатывает данные по сложному алгоритму, зависящему от введенных пользователем данных (текст) - программа выводит результат работы в МЕМО2 на это цикл работы программы заканчивается В ближайшее время кнопка и МЕМО1,2 будут вынесены в ВЕБ-интерфейс (ВЕБ-сервер на одном хосте в просторах интернета) и пользователь будет подключаться к программе как к удаленному сервису через браузер. на текущий момент и после подключения ВЕБ-интерфейса программа одномоментно может работать только с одним пользователем, демо-версия Вопрос: каким образом можно ввести многопользовательский режим: - каждый пользователь получает свою сесссию на ВЕБ-сервере, это понятно - каждый пользователь должен получить на сервере приложения свой поток? в общем как перевести программу написанную для работы с одним пользователем в многопользовательский режим? какие для этого существуют способы? --------------------
Сборник рабочего кода Процедур и Функций DelPhi http://validcoderepo.narod.ru/ |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 31 Всего: 484 |
если у каждого пользователя свой поток, то не вижу проблемы...
|
|||
|
||||
| Pcrepair |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 209 Регистрация: 16.1.2011 Репутация: нет Всего: нет |
так что? нужно переписать код с использованием потоков?
--------------------
Сборник рабочего кода Процедур и Функций DelPhi http://validcoderepo.narod.ru/ |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 31 Всего: 484 |
Зависит от того, как программа будет работать в веб-сессиями.
Если, например, как модуль к аппачу, то не нужно ничего переделывать - аппач сам выдаст отдельный тред. Если, как cgi, то опять же ничего переделывать не нужно - будет запущено несколько экземпляров программы. Если же программа сама будет веб-сервером, то просто вызов процедур нужно будет осуществлять из треда - без использования глобальных переменных проблем не возникнет. Для начала нужно определиться как прикрутить программу к серверу. |
|||
|
||||
| Pcrepair |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 209 Регистрация: 16.1.2011 Репутация: нет Всего: нет |
программа вообщето на отдельном сервере приложений, написана на ДЕЛФИ. сервер находится в одном городе, в одном здании, в одной комнате, подключен к интернету
сервер периодически подключается к веб-серверу(апач конечно, на каком нибуть дешевом хосте где то в просторах интернетума) к ЧАТу, смотрит, нет ли запроса от пользователя ту да же подключается пользователь, вводит в окно ввода текст и нажимает большую красную кнопку (ранее известную как "кракер интернета") сервер получает задачу, решает задачу и отсылает данные взад, в ЧАТ где пользователь их видит, на ХТМЛ странице пока все это работает в однопользовательском режиме, пока текущий пользователь не закончил сессию, другой пользователь не можеи получить доступ к серверу приложений, который находится...... теперь то понятно о чем идет речь? Это сообщение отредактировал(а) Pcrepair - 26.4.2012, 13:39 --------------------
Сборник рабочего кода Процедур и Функций DelPhi http://validcoderepo.narod.ru/ |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 31 Всего: 484 |
Ну в данном варианте получается, что сервер - это апач в интернете.
А приложение является клиентским по отношению к апачу. В этом случае нет никакой необходимости создавать несколько тредов. Можно просто последовательно обработать несколько запросов. |
|||
|
||||
| Pcrepair |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 209 Регистрация: 16.1.2011 Репутация: нет Всего: нет |
нет, апач - это апач, на котором установлен ЧАТ
к ЧАТу подключается пользователь и вводит задание к ЧАТу подключается сервер приложений берет и обрабатывает задание решив задание, сервер приложений отправляет результат в ЧАТ так понятно? --------------------
Сборник рабочего кода Процедур и Функций DelPhi http://validcoderepo.narod.ru/ |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 31 Всего: 484 |
В данном случае сервер приложений является клиентом чата.
А раз он клиент, то многопоточность ему не нужна, т.к. он непосредственно не должен держать несколько сессий. |
|||
|
||||
| Pcrepair |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 209 Регистрация: 16.1.2011 Репутация: нет Всего: нет |
как раз именно несколько сессий(заданий) клиент ЧАТа и должен выполнять
чтоб пользователи не видели таблички "ЗАНЯТО", которая обязательно будет поскольку цикл обработки задания может зпнимать от нескольких минут до нескольких часов --------------------
Сборник рабочего кода Процедур и Функций DelPhi http://validcoderepo.narod.ru/ |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 31 Всего: 484 |
Ну тогда тебе нужен отдельный дежурный поток, который будет загружать страничку чата и добавлять задания в очередь.
А основной поток будет брать задания из очереди, выполнять. Для ускорения процесса можно конечно создать несколько обрабатывающих потоков - по количеству процессоров, чтобы нагрузить на полную. Поскольку структура процедурная, то нужно всего лишь вызвать процедуру из контекста треда. Но это детали. Главное - создать дежурный тред, который будет ставить задания в очередь. |
|||
|
||||
| Pcrepair |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 209 Регистрация: 16.1.2011 Репутация: нет Всего: нет |
то есть нужно изучить и использовать Classes.TThread?
может еще какие косяки известны? по потокам --------------------
Сборник рабочего кода Процедур и Функций DelPhi http://validcoderepo.narod.ru/ |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 31 Всего: 484 |
||||
|
||||
| Pcrepair |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 209 Регистрация: 16.1.2011 Репутация: нет Всего: нет |
Спасибо!
--------------------
Сборник рабочего кода Процедур и Функций DelPhi http://validcoderepo.narod.ru/ |
|||
|
||||
![]()
|
| Правила форума "Delphi: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |