Вызов метода из веб-браузера, который может занять час? - PullRequest
0 голосов
/ 24 февраля 2012

Я надеюсь, что этот вопрос не помечен из-за названия, это особый вопрос, который, как оказалось, охватывает широкий спектр возможностей.

Я выполняю пакетную операцию, которая анализирует файл и готовит транзакцию через интерфейс сокетов, получает ответ, регистрирует его и переходит к следующей операции в пакете.Внешний интерфейс использует ExtJS 3.2.1 в качестве платформы, с прокси-сервером PHP, настроенным для обработки запросов от клиента.

Все это работает нормально, но один пакетный файл может содержать 1000 операций, каждая из которых занимает около 2 секунд (включает предварительные вычисления и печать этикетки).Система, которая обрабатывает это через сокеты, не может поставить в очередь количество операций, содержащихся в пакете, поэтому я вынужден выполнять их по одному;т.е. отправить запрос, получить ответ, затем перейти к следующему.Это может занять довольно много времени, как различные браузеры будут обрабатывать такое длинное время выполнения запроса XHR, даже если мой max_execution_time в PHP установлен правильно?Что еще хуже, также необходимо иметь возможность остановить сценарий и ждать, пока вы поменяете рулоны на принтере после того, как было напечатано заданное количество этикеток.

Это означает, что что-то наодин и тот же слой с моим пользовательским интерфейсом должен обрабатывать пакетные операции по одной за раз, чтобы я мог уведомить пользователя об изменении рулонов, а пользователь мог уведомить приложение о том, что рулон был изменен.Итак, к проблеме.

Я пытался загрузить пакетные операции в ExtJS GridView, но когда я превышаю около 900 элементов, DataView не удается.Я планировал использовать javascript для итерации по GridView и обрабатывать их по одному, регистрируя ответ и подсчитывая количество предварительно выполненных операций печати.DataView на самом деле не нужен, если я могу хранить правильное количество данных JSON и повторять их по одному, все в порядке.Хотя это большая обработка, подойдет ли для этого WebWorker?

Кроме того, все это выполняется в локальной сети (включая подключение через сокет), поэтому у меня также есть возможность создания COM-объекта и его демонстрации.это в PHP.Затем я мог бы заставить пользователя «загрузить» пакетный файл и указать COM-объект на файл через PHP, и позволить этому все обработать.Но как мне информировать пользователя о состоянии выполнения пакетов?Возможно ли все это?

Я просто слишком осторожен, могу ли я просто установить max_execution_time для сценария, выполняющего пакет, и использовать базу данных для хранения процесса пакетов с другим сценарием для опроса состояния каждые x секунд его состояния?В какой момент времени различные браузеры решат, что скрипт слишком долго запущен?

Как я уже сказал, это все локальные сети, и они не будут развернуты где-либо с более чем 5 рабочими станциями на сервер (обычно двумя), только одна из которых будет выполнять пакетные операции в любой момент времени.Таким образом, нагрузка на сервер - это не проблемав сети.В любом случае, я ценю все ответы / комментарии, так как я застрял на том, куда идти дальше.Любой язык будет работать до тех пор, пока я могу выставить его через мой внешний интерфейс HTML / Javascript.Я опытный в php, perl, c / c ++, vb, asp, javascript. Я просто застрял в выяснении, какой способ справиться с этим.

Спасибо

...