LINUX.ORG.RU

Сделать бэкэнд

 , , unoconv


1

2

Итак есть задача.

На vps установлен unoconv, который дергается из php для конвертации docx, odt —> pdf и docx <—> odt.

Задача сделать расширяемый бэкэнд в нормальном ООП-стиле возможно на основе silex, который бы нормально справлялся с очерёдностью конвертации: т.е. пока один юзер конвертирует, второй ждет в очереди необходимое время (подразумевается недолго, 5-7 сек, т.к. формы небольшие).

Сейчас это сделано через пхп-скрипты на коленке, на уровне php3.

Т.е. пока основное требование, чтобы сделать нормальную очередь средствами silex, composer. Например, на основе вот такой библиотеки

Что скажете?

sudo cast deep-purple, Kilte

★★★★★

Последнее исправление: Twissel (всего исправлений: 2)

Ответ на: комментарий от umren

А просто в теории, чем можно организовать нормальную обработку запросов в порядке очереди?

Twissel ★★★★★
() автор топика

Я бы запилил так: пользак пихает данные и ему пишут «В процессе..» И вот только эта часть на пыхе. Ну а сами джобы это уже твое дело, сколько их там одновременно будет работать, на каком языке, когда поменять в БД статус обработки и прочее..

deep-purple ★★★★★
()

Задача сделать расширяемый бэкэнд в нормальном ООП-стиле возможно на основе silex, который бы нормально справлялся с очерёдностью конвертации: т.е. пока один юзер конвертирует, второй ждет в очереди необходимое время

Не очень понятно, почему нельзя запускать этот uniconv для каждого пользователя.

чтобы сделать нормальную очередь средствами silex

Silex работает в классическом php-стиле - отдельный процесс на каждый запрос. Какая нафиг очередь?

ЯННП.

no-such-file ★★★★★
()
Ответ на: комментарий от no-such-file

Не очень понятно, почему нельзя запускать этот uniconv для каждого пользователя.

Не может в параллельное выполнение, только один процесс, потому и очередь.

https://github.com/dagwieers/unoconv/issues/225

https://github.com/dagwieers/unoconv/issues/172

Twissel ★★★★★
() автор топика

Сейчас это сделано через пхп-скрипты на коленке, на уровне php3.

Ну проапгрейдь коленку, что ли. Складывай запросы на обработку в БД, это и будет очередь. Рядом запусти демона, хоть while(1), который будет вытаскивать необработанные запросы и процессить их. Ну и в лучших традициях прикладного костылестроения, опрашивай через ajax каждые 3 секуды о готовности твоего запроса. Всё. Просто, быстро, достаточно.

И вообще не понял зачем в требованиях композер указан.

WARNING ★★★★
()
Последнее исправление: WARNING (всего исправлений: 1)
Ответ на: комментарий от WARNING

И вообще не понял зачем в требованиях композер указан.

Ну думал, что модуль из ОП позволит сделать это менее костыльным способом, оттого и силекс, оттого и композер.

Twissel ★★★★★
() автор топика
Ответ на: комментарий от no-such-file

Написан на Питоне, дергает кишки ЛибреОффиса)))

Twissel ★★★★★
() автор топика
Ответ на: комментарий от no-such-file

А человеку нужно, чтоб все это дело параллелилось на каждый запрос.

Twissel ★★★★★
() автор топика
Ответ на: комментарий от Twissel

composer --install=«сделай мне нормально» ещё не допилен, так что придётся многое делать руками. В данном конкретном случае, чем мощнее и круче, тем больше придётся разбираться и делать. В общем, если задача сделать быстро и чтоб работало, то озвученный вариант вполне норм. Если задача поразбираться и сделать красиво, то reactphp в качестве бэкенда и основы для демона, ZeroMQ для очереди, сокеты для общения с клиентами. Круто будет аж жуть.

WARNING ★★★★
()
Ответ на: комментарий от WARNING

то reactphp в качестве бэкенда и основы для демона, ZeroMQ для очереди, сокеты для общения с клиентами. Круто будет аж жуть.

Только тут еще момент, что фронтэнд на одном хосте, а бэкэнд с потрохами на vps.

Но, думаю это не очень существенно, погуглю))

Twissel ★★★★★
() автор топика
Ответ на: комментарий от Twissel

Не может в параллельное выполнение, только один процесс, потому и очередь.

Можно запустить несколько процессов офиса руками, указав им разные env:UserInstallation и адреса (сокет или пайп) для прослушивания.

https://ask.libreoffice.org/en/question/1686/how-to-not-connect-to-a-running-...

amm
()

Ну тут вроде уже всё за меня сказали. Но вставлю и свои пять копеек.

Не думаю, что при такой задаче стоит заморачиваться с «нормальным ООП-стилем». Я бы просто запилил на том же Silex приложение в одном файле, которое будет просто херачить данные в очередь. Затем демон, написанный на чём угодно, который будет брать данные из очереди и делать то, что требуется. Вместо костыльного поллинга через ajax запросы я бы запилил вебсокеты. Если нужна поддержка клиентов без вебсокетов, есть куча полифиллов.

В итоге что мы имеем: приложение для наполнения очереди, воркеры для обработки очереди, веб-сокет сервер для уведомления клиентов. Очередь можно организовать с помощью redis. Общение воркеров с вебсокет сервером с помощью него же. Ну или тут выше ZeroMQ ещё советовали. Словом, решать тебе.

Вот, как-то так.

Kilte ★★★★★
()
Ответ на: комментарий от Kilte

Спасибо, на будущее возьму на заметку.

Просто первый раз в жизни, нужно было быстро перестроить чужие костыли, чтобы оно хоть как-то приблизительно работало)))

Проофтоплю, не знаешь, есть ли к нормальным веб ЯП обвязки для подобного рода онлайн конверторов?!

В частности интересует Питон и ПХП)))

Twissel ★★★★★
() автор топика
Ответ на: комментарий от Twissel

Так ведь нагуглить не сложно.

Возвращаясь к теме, можно ещё вместо php взять python, а там celery, aiohttp и всё такое. Если ещё и вместо костыльного unoconv что-то нормальное подыскать, то всё должно круто получиться.

Kilte ★★★★★
()
Ответ на: комментарий от Kilte

вместо костыльного unoconv

Вопрос в том, что взять? :-)

Но, это моя забота))

Twissel ★★★★★
() автор топика
Ответ на: комментарий от Kilte

идейка

Слушай, а что если попробовать парсить сам odt через XSLTProcessor, например, а потом, тем или иным образом формировать pdf вместо unoconv и Либры на бекенде?

Twissel ★★★★★
() автор топика
Ответ на: комментарий от Kilte

pandoc интересная штука, действительно, хоть он вроде как на Хаскеле (восторженное улюлюканье функциональщиков), второе — те же яйца,что и uconv только на Джаве, т.к. требуют наличия нативных приложений обработки.

Но, все равно, спасибо)))

Twissel ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.