Niomin
Вы терминологию путаете((.
/show/{id} - это роут
{id} - это атрибут запроса
Контроллер - это класс для экшнов
Экшн - это метод (или класс с фиксированным методом run например), который мапится роутером на роут.
@vlad6085
> Как на практике реализуются приложения, основанные на микросервисах?
Проектируется и реализуется)) Почитайте Сэма Ньюмана "Создание микросервисов"
> Для каждого из них поднимается свой mysql? Или для каждого из них существует своя БД/таблица?
В зависимости от требований к проекту. Безопасней - отадельные БД, так как это обеспечит защиту от бесконтрольной связности проекта.
@mikserok
> А вы сами понимаете эти определения? В вашей терминологии найдена косвеная рекурсия.
Да не вопрос. Видимо у вас есть определения по точнее))
@vlad6085
> Т.е. подразумевается что оно внутреннее, а не внешнее, я так понял.
Если это встравиваемый сервис - внутреннее, если сетевой - внешнее.
> А можно пример "самодостаточного функционала" для понимания?
Сервис отправки почты. API может быть на базе обычной очереди в rabbitmq. Все, что делает эта система - это получает шаблон письма, вставляет туда данные и отправляет.
или
Сервис защиты от мата. Все что он делает - получив на вход сообщение, проверяет его туевой хучей регулярок, и возвращает ответ: "блокировать"/"не блокировать"/"нужна ручная проверка"
@mikserok
> А зачем вообще нужны эти сравнительно новые термины - микросервисы, система, самодостаточный функционал?
Термины нужны для именования вещей и событий))
> Какая от них практическая польза? Просто пишите как писали раньше.
Ну, когда ваш проект не помещается на 10 физических серверов и более - писать как писал не особо то получится))
Сергей Протько Можно)) Илья
В свое время поигрался с laravel - его люто НЕ рекомендую (см. мой ответ Попросили проверить код, на что смотреть нужно? regretful). Lumen - это тот же Laravel, только кастрированный.
Slim - ну хз, если вам именно роутер нужен, а не фреймворк - можете брать.
> А если глянуть на сайте Lumen то по производительности Silex вдалеке.
)) был тут один, что с пеной у рта доказывал, какой восхитительный CodeIgniter, производительность - была основным аргументом. Увы, производительность и php - это разные вещи. Примите за исходную.
> Как в вопросах работы с базой?
Доктрина, лучше пока что нет.
rusrc
> Чистый php и чистый c# - это лишь каркас из операторов.
Верно, но выше вы сравнивали платформу с языком, что не корректно.
Честно говоря я не совсем понимаю, что вы пытаетесь мне доказать)) Если asp.net vs php на примере простого CRUD - смысла в этом мало. Что там, что там трудозатраты будут приблизительно одинаковыми.
Для части задач одна технология лучше, для части - другая. Прототипирование на php например в самый раз
Ну вы сравнили целую платформу asp.net с блекджеком и блудницами с чистый php))
Давайте тогда сравнивать на одном уровне: на чистом C# вы за сколько времени сделаете то же самое? Чот мне кажется, что далеко не за 20 и даже не за день.
Если уже оценивать со стороны оптимальности решения задачи:
1. БД проектируем в MySQL Workbench (время проектирование учитывать не стоит, так как структура таблиц должна подходить под конкретные цели бизнеса И может быть довольно сложная), базовую sql-миграцию получаем при заливке схемы.
2. На том же yii генерируем проект - это одна команда, сама генерация - доли секунды, время по большей части зависит от скорости набора, пусть 10 сек.
3. Генерируем модель под каждую таблицу - ну хз, секунд по 30:
- заходим в генератор моделей
- вводим первые символы названия таблицы
- жмакаем generate
4. Генерируем CRUD: тут тоже самое, что и с моделью, только нужно будет еще дополнительно выбрать модель, под которую делать CRUD, ок, пусть это 40 сек.
Итого: (10 + 30*10 + 40*10) + 3*60(в носу по ковырять) - это приблизительно 15 мин.
OypiStudent
> Неудачная перефразировка. Вилка
Увы, вполне удачная. Если будете суп кушать - быстрее таки ложка.
Данные по тем же вебсокетам не сжимаются например + у вас должно поддерживаться постоянное соединение. В случае LP - вы просто делаете запросы по таймауту. Под нестабильную связь и большой трафик на выгрузку я бы выбрал LP, под мелкий трафик, но критичный по времени - WS.
Тот же Socket.io поддерживает горячую замену протоколов.
> Как определить?
Ну хз, на гуще погадайте, либо посмотрите, что пишет о своем железе хостер.
> Но мы все же о скорости говорим а не удобстве.
Скорость и stateless язык php - это разные не связанные вещи.
> Тот же самый Long Polling или SSE реализованный на ноде будет сильно быстрее работать?
Смотря как напишете, тот же socket.io вполне норм держит нагрузку.
Нода в отличии от php даст вам постоянное состояние, например в другие сервисы, типа redis нет нужды лезть так как у вас состояние прямо на ноде хранится, съэкономите на лишних сетевых запросах.
> А вебсокеты сильно быстрее чем Long Polling или SSE?
Перефразирую ваш вопрос: А ложка сильно быстрее чем вилка, или нож?
> А если те же вебсокеты, но на PHP с помощью elephant?
Смысла нет, это вне целевой области php. Можно конечно, но это костыль.
> memcached? Он разве не требует VPS?
На многих шаред хостингах есть.
Ну как сказать, "что дает". Система переписки - это штука, в которой нужно хранить некое состояние, при этом быстро + к тому эта задача легко ложится на событийную модель обработки, нода для этого и предназначена.
> redis как я понимаю нужно поднимать на VPS?
Ну да
> на простой хостинг нельзя же его закинуть как какой-нибудь фреймворк или CMSку и спокойно запускать
Дык простой хостинг вам и не подходит, в чем проблема то? У вас чат система, она существенно отличается от обычных говносайтиков на цмс)). Можете конечно попробовать вместо redis мемкэш заюзать, но будут сложности.
hbuser
Да не вопрос)) Назовите хотя бы один фреймворк, содержащий в себе функционал, на подобии этой либы. Обращаю внимание на 2 вещи:
1. Не validate, а assert, в смысле бросание исключений
2. Максимальная производительность. Этот функционал используется в каждом методе для проверки входящих аргументов простых типов (за исключением тестов разве что).
Фреймворки как правило не налагают на столько жестких ограничений.
В том же yii как правило проверки происходят в моделях, после их заполнения, часто без явных проверок.
В симфони это делается либо в аннотациях (что очень очень долго и ресурсоемко), либо в энтити на сеттерах.
В ларавеле в оф. доке вообще примеры с обработкой пользовательского ввода в моделях.
> Для начала надо сделать руками хотя бы один раз, чтобы понимать что это и с чем это едят. А человек - новичок.
Дык тоже не вопрос)) эта либа покрывает далеко не все возможные кейсы, при этом расширить ее собственными очень легко, достаточно заэкстендить, написать свое исключение и свою проверку, все.
Рекомендую я ее не потому, что "вот смотрите, какой я молодец", а потому, что это приведет реальному снижению количества возможных ошибок и повышению безопасности кода. Чем раньше придет это понимание - тем лучше.
> Возможно мы не поняли друг друга, я имею ввиду конфиги вроде i18n...
Под переводы лучше использовать старый-добрый gettext, сам уже обжигался на этом. На счет конфигурации приложения: очень удобным является метод, на основании констант (как приятный бонус - хранение в RAM без ручного вмешательства).
Вообще говоря система конфигурации как правило - это задача фреймвока.
> И если спрашивающий захочет, допустим, написать демона или консольную утилиту, ему придется учить что-то новое, а знай он Node.js он смог бы сделать это без труда.
Главное, что бы без эффекта утенка)). Дело в том, что при выборе только одной технологии можно очень легко стать ее заложником для ситуаций, где эта технология не совсем применима.
> так что появись более удобный для меня инструмент, я без особой боли перейду на него.
что скажете про golang?))
В случае тайп хинтинга - необходимости проверять тип нету. Для php7 и выше рекомендую использовать тайп хинтинг всюду.
Для проверки именно значения переменной - стоит использовать библиотеку. Учитывая, что данную либу рекомендую использовать в каждом методе с аргументами простых типов - требования к производительности очень высокие. Быстрее на данный момент только нейтивный код.
hbuser
Смысл есть. Фреймворк - это каркас для бизнес логики, ему как бы все равно, как вы ее реализуете.
Либа же предназначена для легкого и быстрого выполнения проверки аргументов. Это не сравнимые вещи.
HoHsi
> а в чем костыльность нативных await?
нейтивные - это принятые стандартом языка, ES7 на данный момент еще не принят, так что ни о какой нейтивности не может быть и речи.
На счет либ, что вы сбросили - да, есть еще async. А теперь скажите мне, эмулировать синхронность - это не костыль?))
> это уход от проблемы, а не ее решение
Ну как сказать, в случае разделения нод между серверами вам так или иначе придется использовать внешние хранилища, типа redis или memcache, даже на ноде (например под те же сессии). На счет opcache - он и так в ram хранится.
> А почему мы сравниваем только вэб?
потому, что автор спросил про замену php, а php - это web.
> но язык учится не на один проект, и куда перспективнее знать Node.js, а не PHP.
Посмотрите количество вакансий php и node, обычно перспективней учить то, что более востребовано))
Вы терминологию путаете((.
/show/{id} - это роут
{id} - это атрибут запроса
Контроллер - это класс для экшнов
Экшн - это метод (или класс с фиксированным методом run например), который мапится роутером на роут.
/show/123?isDetailed=1 - здесь:
$request->attribute->get('id') === '123';
$request->query->get('isDetailed') === '1';