Чем php плох для реализации websocket сервера?

Yoskaldyr

"Спамер"
Партнер клуба
С пулом с точки зрения mysql ничего от такого перехода - от пачки процессов к одному с пулом соединений - не меняется
Почти не меняется. Есть нюансы с транзакциями, и это иногда усложняет клиентский код. И понятно что для большинства это само собой разумеющееся, но некоторые альтернативно одаренные считают что пул соединений это какая то магия, которая делает тоже самое что в синхронном режиме, но написанная для асинхронщины
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Эээ постой.
mysqli_poll и прочие штуки доступны вроде из коробки
или ты про что?
да, у меня уже устаревшая инфа в голове была, я им последний раз в 5 пхп пользовался, где была возможность выбрать разные бекэнды для него - libmysql и mysqlnd
 

флоппик

promotor fidei
Команда форума
Партнер клуба
В общем случае "тянуть результаты" будет по затратам то же самое, что и полл - один TCP пакет.
Это ты исходишь опять из восприятия "пхп для веба", где важно схватить поменьше, выбросить пораньше.
Выборки из базы конечно, могут быть на мегабайты легко, могут отдаваться небыстро, и это собственно, основные ситуации которые тебя к асинхронному исполнению приводят в любых языках. И там конечно, не один TCP пакет будет.

Мне вот интересно дяденьки, вы уже не спите, или ещё не спите? :)
Во-первых, я в другом часовом поясе!!11, во-вторых, у меня ребенок встает в 5 утра, а значит, все встают в 5 утра.
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Есть нюансы с транзакциями ... некоторые считают что пул соединений это какая то магия, которая делает тоже самое что в синхронном режиме, но написанная для асинхронщины
ох, где же ты мой @Transactional в пхп!
 

Yoskaldyr

"Спамер"
Партнер клуба
ох, где же ты мой @Transactional в пхп!
Ну что в 8-ке скорее всего можно такое будет делать (если конечно все для этого напишут в юзерспейсе). Но это не отменяет проблемы того, что больше 90% разработчиков не понимают какие ограничения с транзакциями при работе с пулом соединений. Хотя наверное вообще большинство не имеют ни малейщего представления о том как работает база данных - магия ёпта.
 

fixxxer

К.О.
Партнер клуба
Больше 90% "разработчиков" вообще нельзя подпускать к клавиатуре, если уж так рассуждать. Это не проблема языков программирования, библиотек или паттернов, как ты все время почему-то говоришь, это проблема уровня образования.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Да, для терминирования ssl и балансировки.
Принципиально это http-сервер ничего не добавляет.
+ leaking bucket/conn limit
+ роутинг
+ failover
+ http/2
+ сжатие
+ geoip
+ стриминг/x-accel/
ну ты сам все знаешь, это обязательная часть инфраструктуры
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Ну да, "проблему блокирования на iowait можно решить, если запихнуть все в память и не ходить в базу", гениально, чо
Все-таки чукча не читатель. Я же написал: проверять modification timestamp по базе.

...и тут мы имеем классическую сложную проблему программирования (инвалидация кэша).

Я вот недавно в похожей ситуации выкинул кэш в памяти и сделал денормализацию в Redis. Медленнее, зато без багодрома.
а я делал выгрузку каталога запчастей для 100к одновременных соединений (не опечатка) кусками в архивах, и в манифесте указывал ID версии каждого куска, чтобы клиенты могли докачивать когда соединение обрывается, и перекачивать когда каталог обновился посреди закачки, и все хорошо,
если контролировать версии, закешировать каталог целиком - нормально
 

fixxxer

К.О.
Партнер клуба
ну ты сам все знаешь, это обязательная часть инфраструктуры
Ну да, и это все задачи лоад балансера, а не аппсервера, так что какая разница? Лоад балансер как был, так и остался, ничего не поменялось.
выгрузку каталога запчастей
Ну это другой кейс немножко. Я про кэширование внутри кластера, тут с определенного момента удобнее использовать общий для всех узлов кэш.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Ну да, и это все задачи лоад балансера, а не аппсервера, так что какая разница? Лоад балансер как был, так и остался, ничего не поменялось.
Я про кэширование внутри кластера, тут с определенного момента удобнее использовать общий для всех узлов кэш.
да, так и есть, middleware лучше быть stateless и балансироваться по pod-ам, а кеш в нем мешает
 
Сверху