Страница 1 из 1

Используем RoadRunner как сервер

Добавлено: 2019.08.15, 02:31
samdark
В качестве эксперимента попробовать раздавать демо-приложение через RoadRunner.

Вот ветка с кодом если захотите попробовать.

Всё до

Код: Выделить всё

while ($request = $psr7->acceptRequest()) {
запускается один раз и далее держится в памяти, включая состояние. То есть контейнер, приложение, настройка error handler и так далее.
Каждый запрос имеем только непосредственно обработку PSR-7 запроса при помощи набора middleware.

В процессе пришлось немного поправить middleware dispatcher чтобы он нормально жил между запросами. Раньше middleware при обработке удалялись из стека. Теперь там есть указатель, который можно сбросить.

На данный момент есть проблема с сессиями при использовании более чем одного воркера. В остальном работает нормально. Время ответа радует:
INFO[0001] ::1 {59.0ms} 200 GET http://localhost:8080/ <----- прогрев
INFO[0002] ::1 {1.00ms} 200 GET http://localhost:8080/
INFO[0003] ::1 {1.01ms} 200 GET http://localhost:8080/
INFO[0004] ::1 {1.00ms} 200 GET http://localhost:8080/
INFO[0005] ::1 {4.00ms} 200 GET http://localhost:8080/login
INFO[0012] ::1 {1.052s} 302 POST http://localhost:8080/login <----- хеширование пароля
INFO[0012] ::1 {1.01ms} 200 GET http://localhost:8080/
INFO[0013] ::1 {1.00ms} 200 GET http://localhost:8080/contact
INFO[0014] ::1 {1.00ms} 200 GET http://localhost:8080/
INFO[0014] ::1 {1.00ms} 200 GET http://localhost:8080/contact
INFO[0014] ::1 {1.01ms} 200 GET http://localhost:8080/
INFO[0015] ::1 {1.00ms} 200 GET http://localhost:8080/contact
INFO[0015] ::1 {1.00ms} 200 GET http://localhost:8080/
INFO[0015] ::1 {1.00ms} 200 GET http://localhost:8080/contact
INFO[0016] ::1 {1.00ms} 200 GET http://localhost:8080/
INFO[0016] ::1 {1.00ms} 200 GET http://localhost:8080/contact
INFO[0017] ::1 {1.00ms} 200 GET http://localhost:8080/
INFO[0017] ::1 {1.00ms} 200 GET http://localhost:8080/contact
INFO[0018] ::1 {1.00ms} 200 GET http://localhost:8080/contact
INFO[0018] ::1 {1.01ms} 200 GET http://localhost:8080/contact
INFO[0018] ::1 {1.00ms} 200 GET http://localhost:8080/
INFO[0018] ::1 {1.00ms} 200 GET http://localhost:8080/
INFO[0019] ::1 {1.01ms} 200 GET http://localhost:8080/
INFO[0019] ::1 {1.00ms} 200 GET http://localhost:8080/
INFO[0020] ::1 {1.00ms} 200 GET http://localhost:8080/contact
INFO[0020] ::1 {1.00ms} 200 GET http://localhost:8080/contact
INFO[0020] ::1 {1.00ms} 200 GET http://localhost:8080/
INFO[0021] ::1 {1.00ms} 200 GET http://localhost:8080/
INFO[0068] ::1 {0.99ms} 200 GET http://localhost:8080/
INFO[0069] ::1 {1.00ms} 200 GET http://localhost:8080/contact
INFO[0069] ::1 {2.00ms} 200 GET http://localhost:8080/

Re: Используем RoadRunner как сервер

Добавлено: 2019.08.15, 14:41
IgorJaev
Извиняюсь. Тут какие-то умельцы что-то нашаманили с Yii2 и теперь это вроде работает из-под RoadRunner (даже с сессиями что-то решили, вроде) - https://github.com/spiral/roadrunner/issues/78

Сама версия Yii2 с PSR-7 от активного участника ветки - https://github.com/charlesportwoodii/yi ... basic-psr7

Но в ней почему-то описание с установкой стандартного yiisoft/yii2-app-basic, походу.. Я что-то не въезжаю.. Не могли бы Вы мне немного пояснить алгоритм действий, если я хочу попробовать накатить себе этот RoadRunner с Yii2, но чуть более подробный? В администрировании серверов не шарю пока, особо :/ Например: 1. запускаем вм с дебианом, устанавливаем то, потом то, потом это :D

Re: Используем RoadRunner как сервер

Добавлено: 2019.08.15, 17:12
samdark
На тему Yii 2 и RoadRunner не подскажу, не проверял как оно работает, но подозреваю там знатные костыли. Не задумывался Yii 2 изначально в таком режиме работать.

Re: Используем RoadRunner как сервер

Добавлено: 2019.08.15, 17:13
IgorJaev
samdark писал(а): 2019.08.15, 17:12 На тему Yii 2 и RoadRunner не подскажу, не проверял как оно работает, но подозреваю там знатные костыли. Не задумывался Yii 2 изначально в таком режиме работать.
Понял. Ну хотя бы примерный алгоритм, что за чем ставить... Буду очень благодарен.

Re: Используем RoadRunner как сервер

Добавлено: 2019.08.15, 17:20
ElisDN
IgorJaev писал(а): 2019.08.15, 14:41 Но в ней почему-то описание с установкой стандартного yiisoft/yii2-app-basic, походу..
Просто не поменяли README. Вручную сделайте git clone и composer install.

Re: Используем RoadRunner как сервер

Добавлено: 2019.08.15, 17:30
samdark
1. Клонируем https://github.com/charlesportwoodii/yi ... basic-psr7
2. composer install
3. Ставим RoadRunner одним из описанных способов: https://roadrunner.dev/docs/intro-install
4. ./rr.exe serve -d -v -c ./rr.yaml
5. http://localhost:8080

Re: Используем RoadRunner как сервер

Добавлено: 2019.08.15, 17:32
samdark

Re: Используем RoadRunner как сервер

Добавлено: 2019.08.15, 23:07
IgorJaev
Всем спасибо. Сейчас будем пробовать...

Re: Используем RoadRunner как сервер

Добавлено: 2019.08.16, 00:35
IgorJaev
Всё остановилось, не успев начаться. Не могу установить Go на свою wm Ubuntu.. Я в том, вообще, направлении, хотя бы? Пойду пока Дебиан мучать.

Re: Используем RoadRunner как сервер

Добавлено: 2019.08.16, 03:54
IgorJaev
Всё-таки запустил я это всё как-то... Как корректно останавливать теперь RR, что бы он порт не занимал? А то приходится процесс потом руками убивать...

Что бы изменения в контейнерах "в продакшн" отправлять, нужно воркеры перезагружать? В реальном времени только изменения в шаблоне отображаются по ф5..

Код: Выделить всё

$ rr http:reset 
Подобные команды не работают почему-то. "RPC service is not configured". Какой-то config file ".rr" не находит в месте, где я запускаю. Хотя сервер от сюда нормально запускается.

Re: Используем RoadRunner как сервер

Добавлено: 2019.08.17, 17:51
skynin
К сожалению нет времени следить за ходом разработки Yii3, но вопрос все же

а почему бы командам разработчиков Yii3 и spiral/framework не объеденить усилия над созданием - одного фреймворка, который был бы спроектирован прежде всего с учетом запуска под RoadRunner.
тогда, по идее, это была бы бомба в мире PHP...
Phalcon такой бомбой не стал...

Re: Используем RoadRunner как сервер

Добавлено: 2019.08.17, 21:45
ElisDN
skynin писал(а): 2019.08.17, 17:51 К сожалению нет времени следить за ходом разработки Yii3, но вопрос все же

а почему бы командам разработчиков Yii3 и spiral/framework не объеденить усилия над созданием - одного фреймворка, который был бы спроектирован прежде всего с учетом запуска под RoadRunner.
тогда, по идее, это была бы бомба в мире PHP...
Phalcon такой бомбой не стал...
Это давно умеют делать по определению все PSR-7 микрофреймворки и сам Spiral. А микрокоманде Yii3 не хватает времени и на сам Yii3.

Re: Используем RoadRunner как сервер

Добавлено: 2019.08.18, 00:19
samdark
Мы частично объединили. Общаемся, помогаем. Слить вообще всё в один фреймворк не получилось по юридическим причинам.

Re: Используем RoadRunner как сервер

Добавлено: 2019.09.18, 11:28
samdark
Кстати, пофиксил сессии. Теперь работает полностью корректно.

Re: Используем RoadRunner как сервер

Добавлено: 2019.10.16, 01:53
mat.twg
samdark писал(а): 2019.09.18, 11:28 Кстати, пофиксил сессии. Теперь работает полностью корректно.
Похоже - это повод посмотреть...