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

25
Демоны на PHP Денис Глазков

Upload: ontico

Post on 19-Jun-2015

3.316 views

Category:

Documents


9 download

TRANSCRIPT

Page 1: Демоны на PHP (Денис Глазков)

Демоны на PHP

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

Page 2: Демоны на PHP (Денис Глазков)
Page 3: Демоны на PHP (Денис Глазков)
Page 4: Демоны на PHP (Денис Глазков)

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

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

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

Page 5: Демоны на PHP (Денис Глазков)

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

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

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

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

• Сервер flashpolicy

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

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

Page 6: Демоны на PHP (Денис Глазков)

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

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

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

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

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

Page 7: Демоны на PHP (Денис Глазков)

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

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

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

– таймауты

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

Page 8: Демоны на PHP (Денис Глазков)

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

Page 9: Демоны на PHP (Денис Глазков)

Frontend-server

Page 10: Демоны на PHP (Денис Глазков)

Схема frontend-backend

Frontend

php-backend

client client client client client

php-backend php-backend

DB Memcache

Page 11: Демоны на PHP (Денис Глазков)

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

Page 12: Демоны на PHP (Денис Глазков)

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

Frontend

backend

client client client client

backend backend

DB Memcache

Frontend

backend

client client client client

backend backend

Page 13: Демоны на PHP (Денис Глазков)

Comet-сервер

nginx

client client client client

php php

comet

Page 14: Демоны на PHP (Денис Глазков)

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

SERVER

CLIENT-1 CLIENT-2

xy

xy

xy

xy

xy

xy

xy

xy

xy

xyxyxy

xyxy

xy

Page 15: Демоны на PHP (Денис Глазков)

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

SERVER

CLIENT-1 CLIENT-2

xy

xy

xy

xy

xy

xy

xy

xy

xy

xy

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

xy

xy

xy

xy

xy

Page 16: Демоны на PHP (Денис Глазков)

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

Page 17: Демоны на PHP (Денис Глазков)

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

Page 18: Демоны на PHP (Денис Глазков)

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

'abc' . $var

"abc $var"

sprintf('abc%s', $var)

Page 19: Демоны на PHP (Денис Глазков)

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

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

2);

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

Page 20: Демоны на PHP (Денис Глазков)

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

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

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

strncmp($var, ‘abc’, 3)

Page 21: Демоны на PHP (Денис Глазков)

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

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

VS

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

• $longVariable

Page 22: Демоны на PHP (Денис Глазков)

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

Page 23: Демоны на PHP (Денис Глазков)

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

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

Page 24: Демоны на PHP (Денис Глазков)

PHP-демоны

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

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

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

Page 25: Демоны на PHP (Денис Глазков)

Вопросы

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

Email/jabber: [email protected]