Демоны на php (Денис Глазков)

Post on 19-Jun-2015

3.316 Views

Category:

Documents

9 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Демоны на PHP

Денис Глазков

Основные преимущества использования демонов на PHP

• Скорость разработки• Возможность быстро построить модель вашего сервиса• Возможности использования готовых PHP-библиотек в

коде демона• «Честное» выделение и чистка памяти

Где лучше применить PHP-демоны

• Асинхронные сервисы– Многопользовательские сервисы с мгновенным уведомлением

• Real-time многопользовательские игры (flash, websocket)

• Чаты. IM-гейты

• Сервер flashpolicy

– Фронтенд-сервер. Comet-server. Оповещение о событиях.

• Синхронные сервисы– Бэкенды. Обработчики. Кэш-сервер со сложной логикой

Отличия libevent от selectlibevent - библиотеки асинхронного неблокирующего ввода/вывода

• Работает с механизмами kqueue, epoll, poll, /dev/poll и select(2)

• Никаких пробеганий по списку в отличие от socket_select()

• Берет на себя организацию буферов на чтение/запись

• Удобное API. Работа с callback-ами

Расширение libevent для PHP• libevent.so – PECL-расширение (by Antony Dovgal)

• Запись/чтение в буфер– event_buffer_write, event_buffer_read

• Работает на callback-ах – события готовности чтения/записи

– таймауты

• PHPDaemon – Фреймворк на php

Примеры архитектурыс использованием PHP-демонов

Frontend-server

Схема frontend-backend

Frontend

php-backend

client client client client client

php-backend php-backend

DB Memcache

Несколько frontend-серверов

Несколько фронтенд-серверов

Frontend

backend

client client client client

backend backend

DB Memcache

Frontend

backend

client client client client

backend backend

Comet-сервер

nginx

client client client client

php php

comet

Проблема приложений с быстрым откликом

SERVER

CLIENT-1 CLIENT-2

xy

xy

xy

xy

xy

xy

xy

xy

xy

xyxyxy

xyxy

xy

Проблема приложений с быстрым откликом

SERVER

CLIENT-1 CLIENT-2

xy

xy

xy

xy

xy

xy

xy

xy

xy

xy

Посылаем периодически пустые пакеты

xy

xy

xy

xy

xy

Особенности PHP-кодинга для разработки демонов

«Экономия на спичках»

«Экономия на спичках»Конкатенация строк

'abc' . $var

"abc $var"

sprintf('abc%s', $var)

«Экономия на спичках»Разбиение строки на подстроки

list($a, $b) = explode(‘|’, $str,

2);

sscanf($str, ‘%[^|]|%s’, $a, $b);

«Экономия на спичках»Сравнение строк на вхождение

preg_match(‘/^abc/’, $var)

substr($var, 0,3) === ‘abc’

strncmp($var, ‘abc’, 3)

«Экономия на спичках»

• $a===const• if else• function• $a

VS

• $a==const• switch• class::method

• $longVariable

Чистка мусора

Чистка мусора

• Закрываем дескрипторы• Явно чистим замкнутые ссылки• unset()

PHP-демоны

• В php имеются полноценные средства для создания асинхронных сервисов с неблокирующими сокетами

• Сервисы с несложной логикой работают не намного хуже демонов на Cи

• Простота и скорость разработки

Вопросы

Глазков ДенисPHP-разработчик компании badoo

Email/jabber: denis@corp.badoo.com

top related