Форум программистов, компьютерный форум, киберфорум
Бета-тестирование
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.50/18: Рейтинг темы: голосов - 18, средняя оценка - 4.50
6 / 9 / 2
Регистрация: 26.07.2021
Сообщений: 48

Wrong MVC - система для быстрой web разработки и запуска сайтов

31.03.2023, 05:34. Показов 6086. Ответов 76

Студворк — интернет-сервис помощи студентам
Доброго времени суток коллеги!
Приглашаю тестировать, использовать, оставлять комментарии, идеи, пожелания. Качественный open source проект сделанный с любовью!

Wrong MVC - это среда для WEB разработки, включающая в себя множество необходимых компонентов, систематизированных в единое пространство и иерархию. Это тот фундамент, позволяющий очень гибко создавать уникальные системы с функционалом действий и страниц, назначенным определенным группам пользователей. Это система для создания на её базе любых WEB проектов, от простейших лендингов в несколько страниц, до сложнейших с многоуровневым разграничением прав доступов и пользовательского функционала, групповыми политиками доступов к моделям функционала, готовым умным uri роутингом, собственной cron реализацией, визуализацией всех моделей и их удобным управлением.

Это не Laravel в плане концепции MVC как таковых, и это не Wordpress в плане концепции сайтовых движков, это WRONG MVC! Система рассчитана на использование опытными Full-stack разработчиками, здесь реализованы все базовые нюансы, которые существенно упрощают и систематизируют разработку. Разобравшись в логике работы данной системы и её возможностях, вы гарантированно и навсегда забудете про php фреймворки или движки! Потому что сборка и реализация любых сложных проектов превратится в простое удовольствие.

ПО "Wrong MVC" имеет открытый исходный код и распространяется под лицензией свободного ПО - Apache License 2.0.

https://wrong-mvc.com/ - сайт проекта, с подробной документацией и описанием
https://github.com/avtobys/wrong-mvc - проект на гитхаб
https://gitlab.com/avtobys/wrong-mvc - проект на гитлаб

Из того что "под капотом":
- Визуально понятная система моделей и контроллеров
- Неограниченная вложенность уровней доступа
- Автоматический роутинг страниц и запросов
- Настраиваемые шаблоны страниц и действий
- Конструктор триггеров действий
- Встроенный редактор кода с подсветкой и горячими клавишами
- Управление группами доступа, пользователями и их функционалом
- Умные стеки PHP - JavaScript кода
- Модальные окна запрашиваемые автоматически из API по AJAX
- Умная подгрузка js библиотек по мере их применения
- API действий, выборок и модальных окон
- X-Auth-Token авторизация в API
- Копирование, экспорт, импорт моделей
- Логгирование любых действий
- Встроенные CRON задачи с выполнением от имени пользователей
- Готовый gulp комбайн для вёрсток и кастомизации
- Создание простых сайтов в пару кликов из готовых шаблонов
- Автоматическая защита всех форм от CSRF
- Бессрочная авторизация по COOKIE с криптованием UID
- Hcaptcha по лимиту Brute force попыток
- Oauth google + yandex авторизации
- Backend: PDO MySQL + PHP
- Frontend: Bootstrap v4.6.1 + JQuery
- Установка в пару кликов
3
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
31.03.2023, 05:34
Ответы с готовыми решениями:

Почему для активной разработки сайтов не используют C# под Web
Почему для активной разработки сайтов не используют C# под Web, ASP.NET ?

Объясните новичку в выборе среды разработки (C/c++) web-сайтов под linux
Задача. Писать веб сайты на с по Linux'om. Не важно asp.net, c# и др. главное язык СИ или С++ ! Какая среда разработки это...

IDE для быстрой разработки
Друзья, прошу не ругать если данный вопрос уже поднимался. После нескольких дней поиска по Интернету, я всетаки не нашел ответ на...

76
3061 / 1463 / 265
Регистрация: 16.03.2008
Сообщений: 6,510
Записей в блоге: 2
01.04.2023, 17:07
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от avtobys Посмотреть сообщение
тут ещё и терминал встроенный в будущем поставить планируется, чтобы далеко не бегать к нему
Ну тут не известно понадобиться. Я делал для битрикс модуль изначально это как раз был полноценная консоль, потом оставил только для работы с git. В итоге практически не пользуюсь. исключение когда есть какие то проблемы с настройкой ssh, и с git надо что то выполнить - что крайне редко. Модуль бесплатный и на маркете, пользуются, но о расширении функционала заявок нет

тут надо еще понимать, что на грамотном проекте на бою на прямую ни кто ни когда файлы не правит. Я, например, как раз наоборот админкой практически не пользуюсь. Из таких дев задач, единственное что использую это консоль SQL команд. (лень пароли к базам на всех проектах запоминать)
0
6 / 9 / 2
Регистрация: 26.07.2021
Сообщений: 48
02.04.2023, 01:21  [ТС]
Цитата Сообщение от voral Посмотреть сообщение
тут не известно понадобиться.
Да это такое, в любом случае это уже будет после docker-compose сборки консоль, там буду встраивать скорее всего, это не скоро ещё. Хочу разворачивать её в будущем сразу с готовым http и бд в докере, чтобы всё как положено, со всеми настроечками, ничего никуда не лепить. Какой нить из isp manager можно взять, вроде сойдет терминал халявный. А там гляну, может что то и урезанное.
0
3061 / 1463 / 265
Регистрация: 16.03.2008
Сообщений: 6,510
Записей в блоге: 2
02.04.2023, 10:19
все же стоит продумать как обновляться. Я сейчас чтоб обновиться отменил все изменения. И теперь надо будет восстанавливать. конечно это все "делается". Но если речь о боевом сервере, то придется его на время обновлений закрывать.

По крайней мере в первую очередь сделайте поддержку .dev.local и сами добавьте этот файл в .gitignore. в общем надо продумать как иметь файлы проекта пользователя от файлов вашей среды разработки.

Так же, а как изменения в БД производятся при обновлении? (если нет можно пока посмотреть на phinx)

Добавлено через 30 минут
Кстати, после обновления сайт не открывается. В логах
Bash
1
AH01071: Got error 'PHP message: PHP Fatal error:  Uncaught Error: Class "Wrong\\Start\\Env" not found in /mnt/disk2/web/www/wr/public_html/index.php:25\nStack trace:\n#0 {main}\n  thrown in /mnt/disk2/web/www/wr/public_html/index.php on line 25'
Добавлено через 2 минуты
Версию хранить в .env как то не логично, на мой взгляд. это не одно и тоже, что настройки подключений и т.п.
0
 Аватар для pgb
-508 / 32 / 0
Регистрация: 22.09.2015
Сообщений: 1,232
02.04.2023, 11:43
Цитата Сообщение от avtobys Посмотреть сообщение
Wrong MVC
Как корабль назовёшь, так он и поплывёт: "Неправильный MVC"
0
6 / 9 / 2
Регистрация: 26.07.2021
Сообщений: 48
02.04.2023, 13:26  [ТС]
Цитата Сообщение от voral Посмотреть сообщение
иметь файлы проекта пользователя от файлов вашей среды разработки
там запланирован импорт пользователей со всеми принадлежащими им моделями(модулями неважно, как угодно)
Цитата Сообщение от voral Посмотреть сообщение
а как изменения в БД производятся при обновлении
пока никак установка только с нуля, в т.ч. и файлы тоже.
Цитата Сообщение от voral Посмотреть сообщение
после обновления сайт не открывается
я ж на psr-4 поменял, видимо поверх файлы закинули, composer dump-autoload и всё поедет.
с нуля установка работает, автоматически её чекаю перед отправкой коммитов.

Добавлено через 1 минуту
pgb, "правильность" в нашей жизни вообще очень скучная и примитивная штука.
0
3061 / 1463 / 265
Регистрация: 16.03.2008
Сообщений: 6,510
Записей в блоге: 2
02.04.2023, 14:16
Цитата Сообщение от avtobys Посмотреть сообщение
я ж на psr-4 поменял, видимо поверх файлы закинули, composer dump-autoload и всё поедет.
с нуля установка работает, автоматически её чекаю перед отправкой коммитов.
Ну я пытаюсь избразить же проект в работе, где нет возможности установить с нуля Про композер понятно - но это еще один повод предусмотреть систему обновлений.

Кроме того после запуска команды композера еще не все изменения требующиеся
"Система установлена и есть зарегистрированные юзеры!"
т.е. надо править скрипт и убирать обратно строку

Понятно, что это мелочи, но тем не менее. Пробуйте рядом развернуть проект на котором вы типа "пользователь wrong mvc".... И оценивайте происходящее с его позиции... Кстати, это можно как раз оформить демо проектом, и опубликовать как вы его делали по шагам как в симфони быстрый старт. Это не учит полноценному владению симфой, но уже моно сделать небольшой сатик. Т.е. быстро вкатились - дальше уже изучаем тонкости по доке
0
Эксперт .NET
 Аватар для Usaga
14367 / 9468 / 1360
Регистрация: 21.01.2016
Сообщений: 35,719
02.04.2023, 15:06
Цитата Сообщение от pgb Посмотреть сообщение
Как корабль назовёшь, так он и поплывёт: "Неправильный MVC"
А ты как свой фреймворк назвал? Вот так же он и существует
0
 Аватар для pgb
-508 / 32 / 0
Регистрация: 22.09.2015
Сообщений: 1,232
02.04.2023, 18:10
Цитата Сообщение от Usaga Посмотреть сообщение
А ты как свой фреймворк назвал?
Фактически никак ещё не назвал, нашёл короткий домен owni.ru(own собственный i я) планировал домашний сервер запустить с привязкой к этому домену. Фреймворк пока назвал OWNI(то есть без сторонних библиотек и с своим подходом) может переменную, а может и так сойдёт
0
02.04.2023, 18:23

Не по теме:


Usaga, ИМХО

Цитата Сообщение от pgb Посмотреть сообщение
Фреймворк пока назвал OWNI(
One Website's Nightmare Implementation

Правда сокращенно тоже звучит, одна буква напрашивается впереди

0
6 / 9 / 2
Регистрация: 26.07.2021
Сообщений: 48
02.04.2023, 19:10  [ТС]
Цитата Сообщение от voral Посмотреть сообщение
я пытаюсь избразить же проект в работе, где нет возможности установить с нуля
пока что не предусмотрены обновления такого плана, будут обязательно, спасибо!
Насчет кнопочек голосования что обсуждали выше, по ограничению функционала. Там будут ещё шаблоны с типом html и они будут точно так же иметь группы доступа. Вот кнопочки и остальные любые блоки, которые не всем должны быть доступны, можно будет помещать в шаблоны с ограниченными правами доступа. Схематично как то так будет встраиваться:
Code
1
2
3
4
5
6
- основной шаблон страницы
    - собственно встраиваемая страница с её контентом
        - некий контент страницы
        - html шаблон <?= Templates::html(777) ?>
        - html шаблон <?= Templates::html(33) ?>
            - html шаблон <?= Templates::html(111) ?>
0
3061 / 1463 / 265
Регистрация: 16.03.2008
Сообщений: 6,510
Записей в блоге: 2
02.04.2023, 19:24
Цитата Сообщение от avtobys Посмотреть сообщение
Там будут ещё шаблоны с типом html и они будут точно так же иметь группы доступа
Представьте ситуацию
На странице у меня есть две формы быстрого заказа, волею дизайнера они имеют разные шаблоны т.е. на странице будет
Templates::html(777)
Templates::html(778)

Плюс еще endpoint принимающий ajax запрос этой заявки. А еще есть где то другая страница, где расширенная форма оформления заявки. В конечном итоге мы должны будем помнить что у нас относится к оформлению заявки и проставлять поотдельности права. Между тем, если бы у нас предоставлялись по функционалу (по модулям). Мы бы просто в одном месте открывали/закрывали.

Конечно можно в шаблонах проверять права на доступ к эндпоинту отправки заявки. Но тогда у нас на хите (когда на странице две формы) будет 4 раза проверяться права. (если сделаете кеширование в рамках хита), то три. Если бы права по функционалу. Тогда (с кешированием в рамках хита) только одна проверка. (под проверкой я имею ввиду достать из базы это право)

Кстати предвосхищая... Может и такая быть ситуация.... На странице два блока одного и того же (в футере и в боковой колонке например форма подписки)

Templates::html(777)
Templates::html(777)

Этот шаблон подключает внутри себя (надеюсь это возможно) js и css файлы. И тут по хорошему надо бы, чтоб один и тот же файл не подключался в header.
1
6 / 9 / 2
Регистрация: 26.07.2021
Сообщений: 48
02.04.2023, 20:07  [ТС]
Цитата Сообщение от voral Посмотреть сообщение
Между тем, если бы у нас предоставлялись по функционалу (по модулям). Мы бы просто в одном месте открывали/закрывали.
Это уже реализовано дело в том что, - отключать и включать некий функционал целиком, а не по отдельности. Создаём группу - "оформление заявок", по сути наш определенный функционал. У шаблонов, эндпоинтов этого функционала группа доступа - "оформление заявок".
Включаем в неё всех существующих пользователей(я добавлю такой функционал, в пользователях, чтобы можно было включать массово пользователей из определенных групп в другие группы и исключать). Всё. Отключаем группу "оформление заявок" - функционал не доступен. Точно также, сейчас например группе демо юзеров, доступно 147 моделей, я же не буду лазить и из каждой их исключать, я просто отключу группу и всё что доступно им в панели админки станет недоступно.
Цитата Сообщение от voral Посмотреть сообщение
Этот шаблон подключает внутри себя (надеюсь это возможно) js и css файлы. И тут по хорошему надо бы, чтоб один и тот же файл не подключался в header.
да надо будет подумать, да, спасибо!
0
03.04.2023, 12:42

Не по теме:

Цитата Сообщение от pgb Посмотреть сообщение
Фреймворк пока назвал OWNI(то есть без сторонних библиотек и с своим подходом)
Возможно, лучшим вариантом будет NIH - Not Invented Here (то есть, чтобы было обязательно своё). Кстати, твой фреймворк и есть сторонняя библиотека по отношению к любому не твоему проекту.

0
6 / 9 / 2
Регистрация: 26.07.2021
Сообщений: 48
04.04.2023, 05:08  [ТС]
voral, как теперь вам крон реализация, ничего не зациклит?
https://wrong-mvc.com/docs/cron.html
Циклить будет, очень качественно, с настройкой потоков для каждой задачи, их поддержкой, контролем за потоками и нагрузкой на сервер. Сейчас настройки задачи из бд дергаются каждый раз, эт конечно плохо в плане множества подключений, особенно для многопоточности, хоть и короткие запросы, подключения закрываются сразу, но всё же. Следующим этапом уйду от этого пожалуй, записи задач будут кешироваться в фс, при выполнении дергаться оттуда и обновляться при изменениях только. И тогда будет вообще огонь по батареям) У меря работало пару десятков парсеров с контролем потоков/нагрузки по такому принципу, схема отработана и отлажена давно, переживать приходилось только чтобы доноры выдерживали нагрузки))) по нескольку млн. страниц в сутки скорости обработок - на ура залетало с хорошими прокси конечно.
0
3061 / 1463 / 265
Регистрация: 16.03.2008
Сообщений: 6,510
Записей в блоге: 2
04.04.2023, 09:50
Цитата Сообщение от avtobys Посмотреть сообщение
Следующим этапом уйду от этого пожалуй, записи задач будут кешироваться в фс, при выполнении дергаться оттуда и обновляться при изменениях только.
Решение правильное, но сразу предусматривайте возможность подмены кеширования. (Т.е. как минимум через интерфейсы). т.е. чтобы можно было для всего проекта переключить разом на другой сервис/тип кеширования. (в т.ч. написав свою реализацию). как пример кто то захочет Redis или Memcache

Добавлено через 6 минут
Цитата Сообщение от avtobys Посмотреть сообщение
voral, как теперь вам крон реализация, ничего не зациклит?
Пока смущает только два момента:
1. По прежнему смущает что все через веб сервер.Почему бы для запуска из системного крона не реализовать отдельный контроллер.

2. Зачем exec. include не подойдет?

Добавлено через 9 минут
так же рекомендую в git другой порядок завести (вам же потом легче будет).

Т.е. коммиты называть именно по выполненной задаче. тут рекомендую посмотреть вот это видео (да и вообще этот курс интересный)

Версии указывать при помощи тегов

А на github добавлять релизы в соответствующий раздел
(имхо, вообще не каждый коммит является новым релизом )

Добавлено через 1 час 55 минут
В функции зарегистрированной register_shutdown_function идет добавление блоков html. Причем с гвоздями прибитыми стилями - это не очень правильно для универсального решения. Т.е. оформляете отдельным модулем/шаблоном/плагином кнопку "вернуться в аккаунт". И пусть разработчик где хочет там ее и вставит. При этом желательно, чтоб была возможность свой шаблон создать... Т.е, для примера, логика этого модуля решает показывать ее или нет (в вашем случае по анализу куки), если надо то подключает заданный шаблон.


Hideout::hide - не очень, на мой взгляд хорошее решение. Вы предлагаете визуально скрывать блоки доступ к которым запрещен текущему пользователю. По идее он вообще такие блоки не должен получать.
1
6 / 9 / 2
Регистрация: 26.07.2021
Сообщений: 48
04.04.2023, 10:59  [ТС]
Цитата Сообщение от voral Посмотреть сообщение
сразу предусматривайте возможность подмены кеширования.
для крон задач это как раз не нужно, у них своё кеширование независимое от других сервисов должно быть. А для кеширования страниц, да, тут надо будет покумекать. Вообще я сейчас подумал, там и роутинг страниц, возможно будет зависеть от домена, т.е. система одна, а на ней разные сайты.
Цитата Сообщение от voral Посмотреть сообщение
2. Зачем exec. include не подойдет?
и как эффективно контролировать эти apache/fmp тогда? Они же не показывают какой именно скрипт выполняется. Писать что то куда то, флаги ставить опять же, это всё лишние ресурсы и неточность, а если их там тысячи будут в секунду, что то отвалилось, не так записалось, не в той очереди записалось. А по exec запустили и можем их в любой момент посчитать, вот они на ладошке все.
Цитата Сообщение от voral Посмотреть сообщение
Причем с гвоздями прибитыми стилями - это не очень правильно для универсального решения. Т.е. оформляете отдельным модулем/шаблоном/плагином кнопку "вернуться в аккаунт".
да, будут же отдельные html шаблончики, это туда и будет встроено, спасибо за наводки)
Цитата Сообщение от voral Посмотреть сообщение
так же рекомендую в git другой порядок завести
принято
Цитата Сообщение от voral Посмотреть сообщение
Вы предлагаете визуально скрывать блоки доступ к которым запрещен текущему пользователю. По идее он вообще такие блоки не должен получать.
Нет, будут ещё и html шаблончики блоков, с правами доступов, вы уже меня на эту мысль навели, будет да крутяк, спасибо за советы и за интерес проявленный!) А этот вариант, он останется чисто для не критичных случаев(в плане безопасности) и чтобы не плодить эти шаблоны там где они не сильно то нужны, под каждую кнопочку/ссылочку. Ну есть страница некая, на ней голосовалка какая-то вызывается или модалка, или ссылка просто. Сама страница доступна как авторизованным так и не авторизованным, но функционал голосовалки/ссылки/модалки только авторизованным доступен, т.е. автоматически будет скрыт у гостей визуально средствами css. Наоборот очень хорошее решение, там где это не критично, мелочь какую то скрыть, чтобы не создавать под неё шаблон. Ну посмотрит он код, запросит недоступный request и получит 403. И будет вариант с шаблонами блоков, там уже будут до вывода проверяться его доступы.
0
3061 / 1463 / 265
Регистрация: 16.03.2008
Сообщений: 6,510
Записей в блоге: 2
04.04.2023, 11:17
Цитата Сообщение от avtobys Посмотреть сообщение
ля крон задач это как раз не нужно, у них своё кеширование независимое от других сервисов должно быть.
Почему? Условно говоря у меня и там и там используется одна и та же выборка - зачем ее гонять без надобности. Но понятно дело, что я, как разработчик использующий ваше решение должен буду иметь возможность управлять что, когда и на сколько кешировать (и когда сбрасывать)....

Ну, а если хотите гибкости: ну можно сделать и там и там на уровне настройки. И я уже буду сам решать будет ли это один кеширующий сервис или разные.


Цитата Сообщение от avtobys Посмотреть сообщение
и как эффективно контролировать эти apache/fmp тогда
Вы хотите своему решению слишком много ответственности дать.

Цитата Сообщение от avtobys Посмотреть сообщение
там тысячи будут в секунду, что то отвалилось, не так записалось, не в той очереди записалось
При грамотном логировании ни чего страшного не случится. Не в той очереди - а как такое может быть? сейчас подобная задачу я решаю следующим образом: первая задача выполняется - если отработала полностью и успешно - она же ставит
в очередь другую задачу. вот и все - очередность гарантированна.

Кстати, у вас там в крон стоит время работы скрипта 90сек.... некоторые задачи на проектах вполне себе минут по 10 -20 выполняются.


PS Настоятельно рекомендую изучить PHPUnit и взять его на вооружение. Он вообще крайне полезен. Тем более для инструмента такого рода, тем более в стадии активной разработки.
0
6 / 9 / 2
Регистрация: 26.07.2021
Сообщений: 48
04.04.2023, 13:20  [ТС]
Цитата Сообщение от voral Посмотреть сообщение
у вас там в крон стоит время работы скрипта 90сек.... некоторые задачи на проектах вполне себе минут по 10 -20 выполняются.
выполнение каждой отдельной задачи в cron.php происходит из под cli в любом случае, и set_time_limit там не учитывается же, поставлю даже 61 сек норм. Там же разделение на потоки происходит и они уже из exec выполняются. Могут выполняться 1000 потоков часами и не зависеть друг от друга никак, и от остальных задач тоже.
PHP
1
2
3
4
5
6
7
set_time_limit(61); // неважно значение для дальнейшего
 
if (Wrong\Start\Env::$e->IS_CLI && !empty($argv[1]) && is_numeric($argv[1])) { // тут оно не учитывается всё равно
    Wrong\Task\Cron::execute(Wrong\Models\Crontabs::find($argv[1])); // этот код отдельного потока может выполняться и пару дней
    $dbh = null;
    exit('success');
}
set_time_limit там 61 будет, это для ежеминутного цикла cron.php по курл http запросам. Например, ничего не запущенно ещё. Пользователь заходит на сайт в 00:00:03 заинжектилась картинка cron.php ему, стартанулись автозапуски, 57 секунд скрипт подождал до начала следующей минуты и в 00:01:00 запустился снова и дальше погнал четко каждую минуту себя запускать
PHP
1
2
3
4
5
6
7
sleep(2);
while (date('s') != '00') {
    usleep(400000);
}
 
Wrong\File\Locker::unlock(basename(__FILE__, '.php')); // разблокировка потока
Wrong\Curl\API::req('/cron.php?' . mt_rand(), 'GET', '', [], 0.001); // автозапуск себя
Чтобы не зависеть от пользователя и автозапуска курлом(может же оборваться) можно дополнительно обычный системный крон поставить ежеминутно wget или curl на выбор, вреда не будет и всё вообще четко будет.
Bash
1
2
3
wget --header="Host: example.com" -qO- http://111.111.111.111/cron.php >/dev/null 2>&1
curl -s -m 1 https://example.com/cron.php >/dev/null 2>&1
curl -s -m 1 -H "Host: example.com" http://111.111.111.111/cron.php >/dev/null 2>&1
Цитата Сообщение от voral Посмотреть сообщение
Почему?
крон задачи не должны зависеть от каких то сторонних сервисов
Цитата Сообщение от voral Посмотреть сообщение
Не в той очереди - а как такое может быть? сейчас подобная задачу я решаю следующим образом: первая задача выполняется - если отработала полностью и успешно - она же ставит
в очередь другую задачу. вот и все - очередность гарантированна.
есть высонагруженная многопоточная задача, её надо запускать в 900 потоков, парсим например что то активно. Логика блокировок и очередности чтобы парсер не качал одну и туже страницу(гарантировать очередность выполнения задачи) - это головная боль разработчика парсера, сейчас не об этом речь, а за контроль самого количества потоков задачи. Потоки могут падать в любой момент, выполняться с разной длительностью и т.д. Нам же надо контролировать количество этих потоков и управлять ими - увеличивать/уменьшать их количество. Писать что то, куда то, вот поток запустился, вот поток выполнен, - это ерунда не эффективная и бажная, проходили. exec('command &') и ps aux | grep-аем затем строку команды задачи.
Цитата Сообщение от voral Посмотреть сообщение
Вы хотите своему решению слишком много ответственности дать
как раз наоборот, слишком много ответственности - это возлагать контроль за потоками на них самих или ещё на что то. Я так делал когда то, многопоточные парсеры, записывал файлами потоки, их состояния, время, чтобы очищать упавшие потоки, таккккая фигня, всё равно приходилось лезть регулярно что то поправлять, а скорость выкачки требовалась космическая. Потом перешел на это решение и 4 года они у меня работали и качали всё как часы.
0
3061 / 1463 / 265
Регистрация: 16.03.2008
Сообщений: 6,510
Записей в блоге: 2
04.04.2023, 14:12
Цитата Сообщение от avtobys Посмотреть сообщение
крон задачи не должны зависеть от каких то сторонних сервисов
Это совсем не сторонний сервис. Это часть системы. Тут вообще нет разницы запустили вы из крон или через веб. Есть некая задача, которая должна быть выполнена. И если в рамках этой задачи кеширование дает хороший профит, его надо использовать. Так же можно посчитать и БД "сторонним сервисом" и вообще все

По сути "запросы" из вне, хоть через консоль хоть через веб, получают контроллеры, по хорошему они должны быть тонкими - просто вызывать различные "сервисы" вашего проекта". А внутри этих сервисов нет необходимости знать как они вызваны - у них есть бизнес задача, которую они должны выполнить максимально эффективно.


Цитата Сообщение от avtobys Посмотреть сообщение
есть высонагруженная многопоточная задача, её надо запускать в 900 потоков, парсим например что то активно. Логика блокировок и очередности чтобы парсер не качал одну и туже страницу(гарантировать очередность выполнения задачи) - это головная боль разработчика парсера,
вообще не проблема. Создаем очередь ссылок потоки, сколько запустим столько и будут с этой очередью работать. Проверено проблем вообще ни каких. И балансировку тоже делал. Просто грубо говоря писал в специальный конфиг, сколько брать за шаг в обработку. такое делал и на парсиге и на генерации каталога (порядка 200 тыс товаров генерируется вместе с картинками).

Цитата Сообщение от avtobys Посмотреть сообщение
Писать что то, куда то, вот поток запустился, вот поток выполнен, - это ерунда не эффективная и бажная, проходили
Не знаю, вообще ни разу не подвела. Это решение работает в нескольких вариантах не первый год и вообще не требует внимание. Все четко.

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


Цитата Сообщение от avtobys Посмотреть сообщение
как раз наоборот, слишком много ответственности - это возлагать контроль за потоками на них самих или ещё на что то
Ну тогда надо всю ОС на php переписать всему где то есть пределы.

Цитата Сообщение от avtobys Посмотреть сообщение
Потом перешел на это решение и 4 года они у меня работали и качали всё как часы.
Та технология, которую я пытался описать работает очень давно, нареканий ни у кого не вызывает. Я лично с 2009 года. Вот те задачи с распараллеливанием, из тех что делали лично я, (где было относительно больше нагрузки - если не ошибаюсь с года 2012 на одном проекте работает). В т.ч. и задачи парсинга были. и работа с АПИ сразу нескольких криптобирж, вообще чуть ли не реалтаймовая была...
0
6 / 9 / 2
Регистрация: 26.07.2021
Сообщений: 48
04.04.2023, 15:34  [ТС]
Цитата Сообщение от voral Посмотреть сообщение
первая задача выполняется - если отработала полностью и успешно - она же ставит
в очередь другую задачу. вот и все - очередность гарантированна.
тут это в элементе достигается так же настройкой
минимум потоков - 1
максимум потоков - 1
максимум 1 гарантирует, что если задача выполняется, другому потоку будет отказано
а если нужно держать её запущенной постоянно(ставить в очередь себя же после выполнения), ставим флаг держать потоки: да. Плюс к этому можно ставить не один поток, а тысячу. Надежно, проверено, осталось кешем уйти только от подключений к бд в каждом потоке.
Цитата Сообщение от voral Посмотреть сообщение
по хорошему они должны быть тонкими - просто вызывать различные "сервисы" вашего проекта"
так можно дойти и до того что и бд сервисы могут использоваться различного типа, и предусматривать это как например laravel предусматривает. Но не вижу в этом смысла, абсолютно всё изолировать от контроллеров.
Цитата Сообщение от voral Посмотреть сообщение
Это совсем не сторонний сервис. Это часть системы.
любой сервис надо ставить, плюс настраивать, он может перезапускаться периодически, что то ещё, а именно крон не должен от этого зависеть, потому что у него могут быть свои архиважные задачи.
Цитата Сообщение от voral Посмотреть сообщение
Ну тогда надо всю ОС на php переписать всему где то есть пределы.
у меня в одном проекте в одном и том же файле из под php через exec юзался bash, python и nodejs, код вырви глаз))) с одной стороны, а с другой если что то позволяет эффективно и без дополнительных танцев с бубном реализовать задачи, то почему бы это не использовать, а ограничивать себя рамками только php.
Цитата Сообщение от voral Посмотреть сообщение
Создаем очередь ссылок потоки, сколько запустим столько и будут с этой очередью работать. Проверено проблем вообще ни каких.
Я так понимаю эти ссылки вы куда то записываете, верно? ок, а перезапускаем сервер, что с этой очередью будет? Для программы они до сих пор выполняются, надо там что то очищать то есть периодически, предусматривать это всё, перезапуски, падения потоков. А тут мы по сути те же "ссылки" потоков записываем в ту же "очередь" выполняя их в фоновом режиме "php -f cron.php 777 &" и имеем над ними полный реалтайм контроль.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.04.2023, 15:34

Софт для быстрой разработки страниц
Собственно и весь вопрос...что посоветуете??? ось желательно семёрка..

Поиск технического партнера в стартап - продукта для быстрой разработки проектной документации (Robodoc)
Привет, всем!) Заброшу удочку в поисках партнера в стартап. Я являюсь основателем программного продукта для быстрой разработки проектной...

Ищу команду для разработки сайтов
Имеется очень огромный объем работы, нужны ответственные люди, с желанием работать. На данный момент интересуют, верстальщики со знанием...

Собираю команду для разработки сайтов
Я собираю команду для разработки сайтов на html php MySQL CSS. Есть идея по созданию крупного и интересного интернет проекта! Пишите здесь,...

Собираю команду для разработки сайтов
Всем привет! Наверняка подобные темы встречаются очень часто поэтому буду не первым) Перейдем к сути дела: Я собираю команду для...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров В текущей версии модели успешно реализован ключевой механизм. . .
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям Реализованные компоненты: Механизм закисления почвы через протонную помпу Конкуренция между типами микориз pH как триггер сукцессии C/ P соотношение. . .
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы ## О чём эта статья В процессе построения ОДУ-модели (система дифференциальных. . .
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет) Содержание проекта Симуляция вековой (50 лет) экологической сукцессии в почве леса Основные участники: АМ-гриб, ЭКМ-гриб,. . .
сукцессия 23. Более физиологичная физиология, более экологичная экология, более диффурные диффуры.
anaschu 12.07.2026
Что реально нашли и починили за эти 5 часов Правило Линдемана (КПД конверсии сахара в тело, kEff) — раньше 100% полученного углерода шло прямо в биомассу гриба; теперь только kEff=0. 5 (после. . .
сукцессия 22. От артефактов к физиологии: калибровка агентной модели грибной сукцессии для воспроизведения сезонной динамики и pH-плато
anaschu 11.07.2026
Аннотация В данной работе представлена калибровка агентной модели динамики грибных сообществ (fungal-succession), направленная на устранение нефизичных артефактов (коллапс биомассы, мгновенное. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru