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

Обсуждаем разработку фреймворка: дизайн компонентов, API, пакеты
Ответить
Аватара пользователя
samdark
Администратор
Сообщения: 9127
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

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

Сообщение samdark » 2019.08.15, 02:31

В качестве эксперимента попробовать раздавать демо-приложение через 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/

IgorJaev
Сообщения: 5
Зарегистрирован: 2019.08.15, 14:32

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

Сообщение IgorJaev » 2019.08.15, 14:41

Извиняюсь. Тут какие-то умельцы что-то нашаманили с 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

Аватара пользователя
samdark
Администратор
Сообщения: 9127
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

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

Сообщение samdark » 2019.08.15, 17:12

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

IgorJaev
Сообщения: 5
Зарегистрирован: 2019.08.15, 14:32

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

Сообщение IgorJaev » 2019.08.15, 17:13

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

Аватара пользователя
ElisDN
Сообщения: 5355
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

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

Сообщение ElisDN » 2019.08.15, 17:20

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

Аватара пользователя
samdark
Администратор
Сообщения: 9127
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

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

Сообщение samdark » 2019.08.15, 17:30

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

Аватара пользователя
samdark
Администратор
Сообщения: 9127
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

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

Сообщение samdark » 2019.08.15, 17:32


IgorJaev
Сообщения: 5
Зарегистрирован: 2019.08.15, 14:32

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

Сообщение IgorJaev » 2019.08.15, 23:07

Всем спасибо. Сейчас будем пробовать...

IgorJaev
Сообщения: 5
Зарегистрирован: 2019.08.15, 14:32

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

Сообщение IgorJaev » 2019.08.16, 00:35

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

IgorJaev
Сообщения: 5
Зарегистрирован: 2019.08.15, 14:32

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

Сообщение IgorJaev » 2019.08.16, 03:54

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

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

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

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

skynin
Сообщения: 186
Зарегистрирован: 2017.12.12, 10:09

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

Сообщение skynin » 2019.08.17, 17:51

К сожалению нет времени следить за ходом разработки Yii3, но вопрос все же

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

Аватара пользователя
ElisDN
Сообщения: 5355
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

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

Сообщение ElisDN » 2019.08.17, 21:45

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

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

Аватара пользователя
samdark
Администратор
Сообщения: 9127
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

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

Сообщение samdark » 2019.08.18, 00:19

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

Ответить