Reactive Programming допомагає нам писати код, який є лаконічним, зрозумілим і читабельним. Поєднання можливостей reactive programming і PHP, однієї з найпоширеніших мов, дозволить вам створювати вебзастосунки більш прагматично.
PHP Reactive Programming навчить вас переваг reactive programming на реальних прикладах із практичним підходом. Ви створите кілька проєктів, демонструючи роботу RxPHP як окремо, так і в поєднанні з іншими бібліотеками.
Книга починається з короткого вступу до reactive programming, чітко пояснюючи важливість побудови реактивних застосунків. Ви використаєте бібліотеку RxPHP, створите за її допомогою reddit CLI, а також перевпровадите Symfony3 Event Dispatcher за допомогою RxPHP. Ви дізнаєтеся, як тестувати ваш код на RxPHP, написавши модульні тести. Далі, до більш цікавих аспектів, ви реалізуєте бекенд для вебсокетів, розробивши браузерну гру. Ви навчитеся впроваджувати доволі складні реактивні системи, уникаючи пасток на кшталт циклічних залежностей, переносячи логіку RxJS з фронтенду на бекенд. Після цього книга зосередиться на написанні розширюваного коду на RxPHP: ви розробите інструмент для тестування коду, а також розглянете Using RxPHP як на серверній, так і на клієнтській стороні застосунку. Завершальна глава про практики reactive programming в інших мовах зробить цю книгу повним посібником, щоб почати писати реактивні застосунки на PHP.
1: ВСТУП ДО REACTIVE PROGRAMMING
— Імперативне програмування
— Декларативне програмування
— Послідовне та паралельне програмування
— Асинхронне програмування
— Функціональне програмування
— Reactive programming
— Reactive Extensions
— Знайомство з RxPHP
— Підсумок
2: REACTIVE PROGRAMMING З RXPHP
— Основні принципи Reactive Extensions
— Конвенції іменування в Reactive Extensions
— Компоненти RxPHP
— Написання класу DebugSubject
— Написання JSONDecodeOperator
— Написання CURLObservable
— proc_open() та non-blocking fread()
— Event loop і RxPHP
— Підсумок
3: НАПИСАННЯ REDDIT READER З RXPHP
— Розгляд внутрішньої будови RxPHP
— Observable::create() та Observable::defer()
— Написання Reddit reader за допомогою RxPHP
— Non-blocking CURLObservable
— Типи класів disposable
— Підсумок
4: REACTIVE VS ТИПОВИЙ EVENT-DRIVEN ПІДХІД
— Обробка станів помилок у ланцюжках операторів
— Оператори concat() та merge()
— Написання реактивного event dispatcher
— Підсумок
5: ТЕСТУВАННЯ КОДУ RXPHP
— Оператори doOn*()
— Встановлення пакета PHPUnit
— Основи написання тестів за допомогою PHPUnit
— Тестування коду RxPHP
— Тестування SumOperator
— Тестування ForkJoinObservable
— Підсумок
6: PHP STREAMS API ТА OBSERVABLES ВИЩОГО ПОРЯДКУ
— Використання Promises у PHP
— PHP Streams API
— Higher-order Observables
— Підсумок
7: РЕАЛІЗАЦІЯ SOCKET IPC ТА WEBSOCKET SERVER/CLIENT
— Backpressure у Reactive Extensions
— Реалізація ProcessObservable
— Додаток Server Manager
— Server Manager і Unix socket server
— Реалізація WebSocket server
— Реалізація WebSocket client
— Підсумок
8: MULTICASTING У RXPHP ТА PHP7 PTHREADS EXTENSION
— Subjects
— Multicasting у RxPHP
— PHP pthreads extension
— RxPHP і pthreads
— Підсумок
9: БАГАТОПОТОКОВІ ТА РОЗПОДІЛЕНІ ОБЧИСЛЕННЯ З PTHREADS І GEARMAN
— Вступ до бібліотеки PHP Parser
— Реалізація ThreadPoolOperator
— Вступ до Gearman
— Підсумок
10: ВИКОРИСТАННЯ ПРОДВИНЕНИХ ОПЕРАТОРІВ І ТЕХНІК У RXPHP
— Оператор zip()
— Оператор window()
— Оператори materialize() та dematerialize()
— Обробка помилок у ланцюжках операторів RxPHP
— Метод Observable::create() проти класу Subject
— Довжина call stack і EventLoopScheduler
— Unsubscribing проти завершення Observable
— Анонімні оператори
— Написання власного DirectoryIteratorObservable
— FTP-клієнт із RxPHP
— Підсумок
11: ПОВТОРНЕ ВИКОРИСТАННЯ ТЕХНІК RXPHP У RXJS
— Що таке RxJS?
— Короткий вступ до RxJS 5 у Node.js
— Higher-order Observables у RxJS 5 та RxPHP
— Оператори, специфічні для RxJS 5
— Підсумок