SlideShare a Scribd company logo
Laravel 5.6 и WebSockets
практика внедрения
и лайфхаки
Латыш Кирилл CTO Cools
Какую проблему решаем?
Real time взаимодействие
клиента и сервера где оба могут
инициировать общение
Что нужно?
Laravel 5.6
WebSocket Server
Queue
Cache
Основная концепция
Любую систему, основанную на работе с
данными, можно описать
c помощью двух типов процессов:
наблюдение данных и изменение данных
Наблюдение
$observableObjects = [
'Class1' => [
'id1' => 1
],
'Class2' => [
'id3' => 1,
'id4' => 1
]
];
1. Данные, наблюдаемые пользователем, всегда
можно представить в виде множества объектов
2. Множество наблюдаемых объектов всегда меньше
или равно множеству объектов, инициированных
во время выполнения скрипта
3. Class и id объекта достаточно для его
идентификации, по этому наблюдаемое
множество объектов можно описать в виде
массива:
Изменение
1. Любые изменения данных, всегда можно
представить в виде следующего массива:
$changedObjects = [
'Class1' => [
'id1' => [
‘action' => ‘create’,
‘data' => [
‘prop1' => ‘val1’,
]
],
'id2' => [
‘action' => ‘update’,
‘data' => [
‘prop1' => ‘val2’,
]
]
],
'Class2' => [
'id3' => [
'action' => ‘delete’
]
]
];
Sockets Сервер
Главное условие - оставить Sockets сервер
максимально легковесным что бы не
получить проблемы с памятью.
Его единственная задача отправлять
сообщения клиенту
Очередь
Вся логика обработки изменений выносится
в задачу которая помещается в очередь
FrontEnd
Нужно хранить данные на фронте в виде
массива, схожего с массивом наблюдаемых
объектов - тогда можно унифицировать
получение обновлений с сервера
Что именно делаем?
1. В AppServiceProvider в register() создаем
контейнеры для трекинга наблюдаемых и
изменяемых объектов
2. В Model в setRawAttributes() трекаем наблюдаемые
объекты
3. В Model в save() и в delete() трекаем изменения
4. Не забываем о BelongsToMany и переопределяем
attach() и detach()
5. По комиту транзакции или в
register_shutdown_function() ставим в очередь
задачу на обработку изменений
СПАСИБО

More Related Content

ODP
Обзор технологии iCloud для iOs
PPTX
Диагностика проблем в рабочей среде при помощи IntelliTrace и Visual Studio 2...
ODP
!!9hl2008 New
ODP
Hl2008 New
PPT
Сергей Париев - "обработка дедлоков в MySql"
PDF
Обработка дедлоков в MySql
PDF
Android осень 2013 лекция 6
PDF
FrontDays #1. Алексей Ульянов, React.js и методологии разработки на нём
Обзор технологии iCloud для iOs
Диагностика проблем в рабочей среде при помощи IntelliTrace и Visual Studio 2...
!!9hl2008 New
Hl2008 New
Сергей Париев - "обработка дедлоков в MySql"
Обработка дедлоков в MySql
Android осень 2013 лекция 6
FrontDays #1. Алексей Ульянов, React.js и методологии разработки на нём

What's hot (11)

PDF
Android - 13 - Database
PDF
Александр Саитов «Основы профилирования и оптимизации приложений в .NET»
PPTX
Синхронный MODX: как сделать настоящую синхронизацию и не застрелиться
PPTX
Разработка и внедрение PHP SDK myTarget
PDF
Database (Lecture 14 – database)
PPTX
как из трех стоек сделать две.
PDF
FrontDays #2. Игорь Лобанов, Миграция Backbone (Marionette) -> React + Redux
PDF
Алексей Андросов "Архитектура фронтенда Яндекс.Почты"
PDF
«Магия Google Tag Manager на примере реальных кейсов», Дмитрий Сульман, СКБ К...
PPTX
10 бесплатных инструментов для контроля вашей ИТ-инфраструктуры
PPTX
Безболезненный Fallback cache на Scala / Олег Нижников (Tinkoff.ru)
Android - 13 - Database
Александр Саитов «Основы профилирования и оптимизации приложений в .NET»
Синхронный MODX: как сделать настоящую синхронизацию и не застрелиться
Разработка и внедрение PHP SDK myTarget
Database (Lecture 14 – database)
как из трех стоек сделать две.
FrontDays #2. Игорь Лобанов, Миграция Backbone (Marionette) -> React + Redux
Алексей Андросов "Архитектура фронтенда Яндекс.Почты"
«Магия Google Tag Manager на примере реальных кейсов», Дмитрий Сульман, СКБ К...
10 бесплатных инструментов для контроля вашей ИТ-инфраструктуры
Безболезненный Fallback cache на Scala / Олег Нижников (Tinkoff.ru)
Ad

Similar to Laravel websockets (20)

PDF
Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"
PDF
ASP.NET MVC за пределами Hello World. Дятлов Александр D2D Just.NET
PDF
React со скоростью света: не совсем обычный серверный рендеринг
PPTX
Хватит писать инфраструктурный код
PDF
SE2016 Java Dmitriy Kouperman "Working with legacy systems. Stabilization, mo...
PDF
Dmitriy Kouperman Working with legacy systems. stabilization, monitoring, man...
PDF
Олег Крут (DataArt) "Что такое интернет вещей и как с ним работать"
PPT
PDF
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
PPTX
ASP.NET, MVC, ASP.NET MVC
PDF
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))
PPTX
ObjectManager, или как работать с большим количеством объектов на карте, Мари...
PDF
DevOps или исскуство ухода за Интернет-проектом
PPT
Easy authcache 2 кеширование для pro родионов игорь
PPT
Easy authcache 2 кэширование для pro. Родионов Игорь
PPTX
Приложения для Windows Phone: как мы это делаем #codefest
PDF
Лекция Android. БД SQLite, ContentProvider, Loader
PPT
HSE{Consult}: DevOps – новая методология разработки
PDF
Влад Ковташ — Yap Database
PDF
UWDC 2013, Yii2
Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"
ASP.NET MVC за пределами Hello World. Дятлов Александр D2D Just.NET
React со скоростью света: не совсем обычный серверный рендеринг
Хватит писать инфраструктурный код
SE2016 Java Dmitriy Kouperman "Working with legacy systems. Stabilization, mo...
Dmitriy Kouperman Working with legacy systems. stabilization, monitoring, man...
Олег Крут (DataArt) "Что такое интернет вещей и как с ним работать"
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
ASP.NET, MVC, ASP.NET MVC
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))
ObjectManager, или как работать с большим количеством объектов на карте, Мари...
DevOps или исскуство ухода за Интернет-проектом
Easy authcache 2 кеширование для pro родионов игорь
Easy authcache 2 кэширование для pro. Родионов Игорь
Приложения для Windows Phone: как мы это делаем #codefest
Лекция Android. БД SQLite, ContentProvider, Loader
HSE{Consult}: DevOps – новая методология разработки
Влад Ковташ — Yap Database
UWDC 2013, Yii2
Ad

Laravel websockets

  • 1. Laravel 5.6 и WebSockets практика внедрения и лайфхаки Латыш Кирилл CTO Cools
  • 2. Какую проблему решаем? Real time взаимодействие клиента и сервера где оба могут инициировать общение
  • 4. Основная концепция Любую систему, основанную на работе с данными, можно описать c помощью двух типов процессов: наблюдение данных и изменение данных
  • 5. Наблюдение $observableObjects = [ 'Class1' => [ 'id1' => 1 ], 'Class2' => [ 'id3' => 1, 'id4' => 1 ] ]; 1. Данные, наблюдаемые пользователем, всегда можно представить в виде множества объектов 2. Множество наблюдаемых объектов всегда меньше или равно множеству объектов, инициированных во время выполнения скрипта 3. Class и id объекта достаточно для его идентификации, по этому наблюдаемое множество объектов можно описать в виде массива:
  • 6. Изменение 1. Любые изменения данных, всегда можно представить в виде следующего массива: $changedObjects = [ 'Class1' => [ 'id1' => [ ‘action' => ‘create’, ‘data' => [ ‘prop1' => ‘val1’, ] ], 'id2' => [ ‘action' => ‘update’, ‘data' => [ ‘prop1' => ‘val2’, ] ] ], 'Class2' => [ 'id3' => [ 'action' => ‘delete’ ] ] ];
  • 7. Sockets Сервер Главное условие - оставить Sockets сервер максимально легковесным что бы не получить проблемы с памятью. Его единственная задача отправлять сообщения клиенту
  • 8. Очередь Вся логика обработки изменений выносится в задачу которая помещается в очередь
  • 9. FrontEnd Нужно хранить данные на фронте в виде массива, схожего с массивом наблюдаемых объектов - тогда можно унифицировать получение обновлений с сервера
  • 10. Что именно делаем? 1. В AppServiceProvider в register() создаем контейнеры для трекинга наблюдаемых и изменяемых объектов 2. В Model в setRawAttributes() трекаем наблюдаемые объекты 3. В Model в save() и в delete() трекаем изменения 4. Не забываем о BelongsToMany и переопределяем attach() и detach() 5. По комиту транзакции или в register_shutdown_function() ставим в очередь задачу на обработку изменений