Pull to refresh

Comments 34

А под нагрузкой тестировали?
Сколько примерно одновременных клиентов может обслужить такой сервис?
По наличию свободных портов макс. около 60к или все же меньше?
и еще немаловажно, исследовать зависимость между количеством подключенных клиентов и задержку в отправке сообщений между клиент-сервером.
Если будет возможность — обращу внимание и отпишусь.
UFO just landed and posted this here
К сожалению, пока нет возможности протестировать под серьезной нагрузкой. Но в сети вроде встречал упоминания, что phpDaemon дает весьма неплохие результаты.
теоретически — количество свободных портов * количество подключений к 1 порту (64К) если не ошибаюсь.
Кол-во свободных портов сервера не имеет значения, потому что все клиенты подключаются к одному порту (в данном случае 8047). Кол-во подключений к порту не ограничивается 64 тысячами.
Кто-нибудь в курсе, какими преимуществами обладает phpDaemon по сравнению с node.js?
Кстати, я тоже сейчас думаю что выбрать для работы WebSocket-ами. Или изучить новый для себя Node.js, или попытаться использовать хорошо знакомый PHP с phpDaemon.

В phpDaemon немного пугает то, что PHP изначально не был приспособлен для работы как демон, да и поддержка у него не лучшая. В Node.js с информацией и поддержкой все отлично, но это для меня новая среда, с существенно иными подходами и стилем программирования.

Думаю, если бы мне требовалось делать долгосрочный и большой проект, я бы склонился все же к Node.js. А если проект небольшой и не сложный, то я, как PHP-шник, я попробую phpDaemon.
Я 2 дня мучался с phpDaemon, перерыл всю информацию какую смог найти, понял что большинство на форумах давно устарело. С трудом сделал рабочий пример, который терял коннекшены когда ему заблагорассудится.Потом плюнул и за 3 часа прочел теорию о Node.js и написал ту же логику без проблем.

Может я и ошибасюь, но если вебсокеты — то Node.js
Я предполагаю, что если хорошо владеешь PHP, но пугает серьезное программирование на Node.js то можно сделать на Node.js лишь маленький скрипт, который ретранслирует вызовы в PHP и обратно. А всю сложную логику сделать уже на PHP.
Думал о таком, но как-то во всех сценариях пришедших в голову без демона (самописного или на базе phpdaemon) на PHP не обойтись. Разве что писать либу для node.js, работающую с пулом php-fpm. Ну или тупо вызывать в аналогах system или exec CLI скрипт на PHP.
Можно общаться и через message queue, например, rabiitmq или zmq. Такой подход, в частности, я видел в недавнем примере zerogw
Так всё равно же нужен будет демон на PHP, который будет вытаскивать сообщения из очереди и их обрабатывать. Или нет? Я из подобных систем только с Gearman разбирался.
Конечно, но, в данном случае, демон будет очень простой и не нужно заморачиваться с websockets.
У меня была уже часть написана на PHP. Переписывать ее на Node — нужно было выучить фреймворк Express. Посчитал лишним и настроил общение c PHP через Memcached (умные люди советуют Redis, но мне хватило и мемкеша)
Тоже как-то для одной локальной задачи познакомился с WebSockets и нормальных решений не смог найти для серверной стороны (все громоздкие были для моей задачи). В итоге простейшую реализацию на перле написал по документации за полчаса.
Хех, только решил Хабр глянуть перед тем как нечто подобное написать (пост о веб-сокетах на PHP и пример приложения, правда с взаимодействием «динамической» части с обычной «статической» через что-нибудь типа German) и вот, не успел…
А вы пишите, не стесняйтесь, я думаю будет интересно не только мне ;)
Народ, а никто не пробовал случаем Ratchet + Autobahn? Сейчас к нему присматриваюсь. Очень подкупает хорошая документация (по сравнению с тем же phpDaemon).
Кто использовал WebSockets, приведите примеры для чего?
Ещё не использую, но планирую для уведомления одних клиентов о событиях на сервере и других клиентах.
Если нужно уведомлять только клиентов в реальном времени, зачем двусторонняя связь?
SSE не рассматривали или что-то подобное, что передаёт данные в реальном времени только на клиент?
Не вижу особой разницы с WS. Всё равно нужен будет демон, поддерживающий постоянные соединения с другими клиентами и механизм информирования демона.
В случае с SSE можно использовать обычный php файл (урл по которому будет запускаться php скрипт) и ничего не нужно устанавливать на сервере. Только убрать буферизацию, чтобы данные сразу отправлялись на клиент и в случае с php отпустить сессию session_write_close(), чтобы параллельные запросы работали от одного юзера.

Насколько это хуже или лучше не знаю!? Но настраивать гораздо проще чем с сокетами.
Не понял как. Вот есть у меня 1000 клиентов, установивших соедение с сервером на предмет получения событий от него. С чем они это соединение устанавливают? С апачем? 1000 воркеров?
Выходит что так — будут висеть разные процессы и в них может быть разная логика. Не всем одно и тоже отсылается.

А сокет вы будете открывать получается один на всех? Без привязки к конкретному пользователю? и все подключенные пользователи будут получать абсолютно одинаковую информацию?
На одном сокете одного процесса могут висеть тысячи соединений и работа с ними происходить независимо.
А что вы планируете использовать для сокетов?
PhpDaemon. Уже есть поддержка сервера ws, уже есть проверенная временем реализация многопроцессного сервера, на базе libevent.

Ну, а в учебных целях или при незначительной нагрузке можно написать свой однопроцессный велосипед на базе обычных сокет-функций или даже многопроцессный на базе pcntl и semaphore, а то и с ptheads попробовать замутить, но подозреваю, что там будет много подводных камней.
Баг странный… Есть два клиента. Перезапускаем демон, оба клиенте коннектятся, шлют сообщения, оба видят кто что шлет. Если у одного из клиента обновить страницу, то отсылаемые от него сообщения другой клиент уже не видит.
Вероятно, имеется какая-то ошибка в PHP-коде. Вслепую сложно сказать. Попробуйте сделать простое тестовое приложение, если глюк повторится и в нем, выгрузите код этого приложения и задайте вопрос на официальном форуме или тостере.
Исходники примера хотелось бы на git, с зависимостями в composer.json.
Sign up to leave a comment.

Articles