Подскажите по следующему вопросу:
Создается некоторое приложение, которое должно работать на сервере. Пользователи обращаются к нему через браузер, вводят данные в формы на web-странице, эти данные передаются в программу, она рассчитывает результат и возвращает его в браузер.
В настоящее время программа вызывается php-скриптом (команда system), при этом на каждый вызов создается своя копия программы.
Собственно вопросы:
1) Возможен ли другой вариант, реализации, когда будет запущена только одна копия программы, которая будет обслуживать всех пользователей? Если да, то какой это вариант, есть ли примеры?
2) Если другой вариант невозможен, то как можно ограничить, количество запускаемых копий программы, например пятью, шестью, десятью?
MS Windows XP SP2, ASP Linux 11
FPC 2.2.0, Lazarus 0.9.24.
Приложение с доступом через интернет
Модератор: Модераторы
Встречный вопрос: Какая платформа (ОС) на сервере?
Смею предположить, что Linux.
В форуме есть исходник nYume - заготовки веб-сервера. Это основа вашей будущей системы.
Существуют два пути решения первой проблемы:
1. реализовать свой многопоточный веб-сервер куда будет направляться запрос из формы. Повесьте его на отдельный порт или Ip.
2. сделать "внутренний" веб-сервис, к которому будет обращаться php-скрипт. Open("localhost:3000") и т.д. Ваш сервис будет принимать и обрабатывать запросы только от локалхоста. Возвращать данные, к примеру, в XML. PHP скрипт уже представит ответ пользователю.
По второй проблеме. Ограничить количество запусков можно через мьютексы - увеличивать индекс в каком-нибудь хранилище при запуске, и уменьшать - при закрытии. Если индекс слишком велик, то завершаться сразу....
Смею предположить, что Linux.
В форуме есть исходник nYume - заготовки веб-сервера. Это основа вашей будущей системы.
Существуют два пути решения первой проблемы:
1. реализовать свой многопоточный веб-сервер куда будет направляться запрос из формы. Повесьте его на отдельный порт или Ip.
2. сделать "внутренний" веб-сервис, к которому будет обращаться php-скрипт. Open("localhost:3000") и т.д. Ваш сервис будет принимать и обрабатывать запросы только от локалхоста. Возвращать данные, к примеру, в XML. PHP скрипт уже представит ответ пользователю.
По второй проблеме. Ограничить количество запусков можно через мьютексы - увеличивать индекс в каком-нибудь хранилище при запуске, и уменьшать - при закрытии. Если индекс слишком велик, то завершаться сразу....
Программа предполагается кроссплатформенной, чтобы могла работать и на Unix/Linux и на Windows серверах.
В принципе можно использовать отдельный файл. Но не будет ли ошибки при обращении к нему двух копий программы одновременно?
Спасибо огромное. Буду смотреть в этих направлениях.
Ограничить количество запусков можно через мьютексы - увеличивать индекс в каком-нибудь хранилище при запуске, и уменьшать - при закрытии.
В принципе можно использовать отдельный файл. Но не будет ли ошибки при обращении к нему двух копий программы одновременно?
Существуют два пути решения первой проблемы
Спасибо огромное. Буду смотреть в этих направлениях.
Ракшас писал(а):Возможен ли другой вариант, реализации, когда будет запущена только одна копия программы, которая будет обслуживать всех пользователей?
Если сервер тоже написать на Паскале, то надо сделать многопоточную программу. Т.е. сама программа занимается только тем, что прослушивает определённый порт компьютера и ждёт какого-нибудь соединения. Дождавшись и получив IP клиента, запускает процедуру расчёта в отдельном потоке, получивши ответ, передаёт его этому IP-шнику.
Только не забудь после начала расчёта заблокировать кнопку "Расчёт" и вывесить сообщение - "Не жми мне на батоны, я считаю...", а то клиент будет в панике давить на кнопку "расчёт", запустит семь тысяч потоков и завалит сервер.
В разделе "Ссылки" этого сайта есть ссылка на компоненты "Indy" для построения всевозможных сетевых приложений. Эти компоненты кроссплатформенны, так что собрать веб-сервер для Win и для Linux труда не составит. Там же и примерчики можно взять.
Насчет ошибок при совместном доступе к файлу нужно поискать по ключевой фразе "блокировка доступа к файлу".
flock() или что-то подобное.
flock() или что-то подобное.
Насчет ошибок при совместном доступе к файлу нужно поискать по ключевой фразе "блокировка доступа к файлу".
flock() или что-то подобное
Спасибо, буду искать.
