Приложение с доступом через интернет

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
Ракшас
незнакомец
Сообщения: 8
Зарегистрирован: 17.11.2008 16:07:35

Приложение с доступом через интернет

Сообщение Ракшас »

Подскажите по следующему вопросу:
Создается некоторое приложение, которое должно работать на сервере. Пользователи обращаются к нему через браузер, вводят данные в формы на web-странице, эти данные передаются в программу, она рассчитывает результат и возвращает его в браузер.
В настоящее время программа вызывается php-скриптом (команда system), при этом на каждый вызов создается своя копия программы.
Собственно вопросы:
1) Возможен ли другой вариант, реализации, когда будет запущена только одна копия программы, которая будет обслуживать всех пользователей? Если да, то какой это вариант, есть ли примеры?
2) Если другой вариант невозможен, то как можно ограничить, количество запускаемых копий программы, например пятью, шестью, десятью?

MS Windows XP SP2, ASP Linux 11
FPC 2.2.0, Lazarus 0.9.24.
Timid
постоялец
Сообщения: 290
Зарегистрирован: 21.11.2007 20:33:15

Сообщение Timid »

Встречный вопрос: Какая платформа (ОС) на сервере?

Смею предположить, что Linux.

В форуме есть исходник nYume - заготовки веб-сервера. Это основа вашей будущей системы.
Существуют два пути решения первой проблемы:
1. реализовать свой многопоточный веб-сервер куда будет направляться запрос из формы. Повесьте его на отдельный порт или Ip.
2. сделать "внутренний" веб-сервис, к которому будет обращаться php-скрипт. Open("localhost:3000") и т.д. Ваш сервис будет принимать и обрабатывать запросы только от локалхоста. Возвращать данные, к примеру, в XML. PHP скрипт уже представит ответ пользователю.

По второй проблеме. Ограничить количество запусков можно через мьютексы - увеличивать индекс в каком-нибудь хранилище при запуске, и уменьшать - при закрытии. Если индекс слишком велик, то завершаться сразу....
Ракшас
незнакомец
Сообщения: 8
Зарегистрирован: 17.11.2008 16:07:35

Сообщение Ракшас »

Программа предполагается кроссплатформенной, чтобы могла работать и на Unix/Linux и на Windows серверах.
Ограничить количество запусков можно через мьютексы - увеличивать индекс в каком-нибудь хранилище при запуске, и уменьшать - при закрытии.

В принципе можно использовать отдельный файл. Но не будет ли ошибки при обращении к нему двух копий программы одновременно?
Существуют два пути решения первой проблемы

Спасибо огромное. Буду смотреть в этих направлениях.
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

Ракшас писал(а):Возможен ли другой вариант, реализации, когда будет запущена только одна копия программы, которая будет обслуживать всех пользователей?

Если сервер тоже написать на Паскале, то надо сделать многопоточную программу. Т.е. сама программа занимается только тем, что прослушивает определённый порт компьютера и ждёт какого-нибудь соединения. Дождавшись и получив IP клиента, запускает процедуру расчёта в отдельном потоке, получивши ответ, передаёт его этому IP-шнику.
Только не забудь после начала расчёта заблокировать кнопку "Расчёт" и вывесить сообщение - "Не жми мне на батоны, я считаю...", а то клиент будет в панике давить на кнопку "расчёт", запустит семь тысяч потоков и завалит сервер. :)
В разделе "Ссылки" этого сайта есть ссылка на компоненты "Indy" для построения всевозможных сетевых приложений. Эти компоненты кроссплатформенны, так что собрать веб-сервер для Win и для Linux труда не составит. Там же и примерчики можно взять.
Timid
постоялец
Сообщения: 290
Зарегистрирован: 21.11.2007 20:33:15

Сообщение Timid »

Насчет ошибок при совместном доступе к файлу нужно поискать по ключевой фразе "блокировка доступа к файлу".
flock() или что-то подобное.
Ракшас
незнакомец
Сообщения: 8
Зарегистрирован: 17.11.2008 16:07:35

Сообщение Ракшас »

Насчет ошибок при совместном доступе к файлу нужно поискать по ключевой фразе "блокировка доступа к файлу".
flock() или что-то подобное

Спасибо, буду искать.
Ответить