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

What's hot

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

What's hot (11)

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

Similar to Laravel websockets

Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"
Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"
Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"
Yandex
 
ASP.NET MVC за пределами Hello World. Дятлов Александр D2D Just.NET
ASP.NET MVC за пределами Hello World. Дятлов Александр D2D Just.NETASP.NET MVC за пределами Hello World. Дятлов Александр D2D Just.NET
ASP.NET MVC за пределами Hello World. Дятлов Александр D2D Just.NET
Dev2Dev
 
React со скоростью света: не совсем обычный серверный рендеринг
React со скоростью света: не совсем обычный серверный рендерингReact со скоростью света: не совсем обычный серверный рендеринг
React со скоростью света: не совсем обычный серверный рендеринг
Timophy Chaptykov
 
Хватит писать инфраструктурный код
Хватит писать инфраструктурный кодХватит писать инфраструктурный код
Хватит писать инфраструктурный код
Vadim Martynov
 
SE2016 Java Dmitriy Kouperman "Working with legacy systems. Stabilization, mo...
SE2016 Java Dmitriy Kouperman "Working with legacy systems. Stabilization, mo...SE2016 Java Dmitriy Kouperman "Working with legacy systems. Stabilization, mo...
SE2016 Java Dmitriy Kouperman "Working with legacy systems. Stabilization, mo...
Inhacking
 
Dmitriy Kouperman Working with legacy systems. stabilization, monitoring, man...
Dmitriy Kouperman Working with legacy systems. stabilization, monitoring, man...Dmitriy Kouperman Working with legacy systems. stabilization, monitoring, man...
Dmitriy Kouperman Working with legacy systems. stabilization, monitoring, man...
Аліна Шепшелей
 
Олег Крут (DataArt) "Что такое интернет вещей и как с ним работать"
Олег Крут (DataArt) "Что такое интернет вещей и как с ним работать"Олег Крут (DataArt) "Что такое интернет вещей и как с ним работать"
Олег Крут (DataArt) "Что такое интернет вещей и как с ним работать"
DataArt
 
Дэдлоки
ДэдлокиДэдлоки
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
Dev_Party
 
ASP.NET, MVC, ASP.NET MVC
ASP.NET, MVC, ASP.NET MVCASP.NET, MVC, ASP.NET MVC
ASP.NET, MVC, ASP.NET MVC
GetDev.NET
 
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))
Noveo
 
ObjectManager, или как работать с большим количеством объектов на карте, Мари...
ObjectManager, или как работать с большим количеством объектов на карте, Мари...ObjectManager, или как работать с большим количеством объектов на карте, Мари...
ObjectManager, или как работать с большим количеством объектов на карте, Мари...
Ontico
 
DevOps или исскуство ухода за Интернет-проектом
DevOps или исскуство ухода за Интернет-проектомDevOps или исскуство ухода за Интернет-проектом
DevOps или исскуство ухода за Интернет-проектом
Alexander Titov
 
Easy authcache 2 кеширование для pro родионов игорь
Easy authcache 2   кеширование для pro родионов игорьEasy authcache 2   кеширование для pro родионов игорь
Easy authcache 2 кеширование для pro родионов игорьdrupalconf
 
Easy authcache 2 кэширование для pro. Родионов Игорь
Easy authcache 2   кэширование для pro. Родионов ИгорьEasy authcache 2   кэширование для pro. Родионов Игорь
Easy authcache 2 кэширование для pro. Родионов ИгорьPVasili
 
Приложения для Windows Phone: как мы это делаем #codefest
Приложения для Windows Phone: как мы это делаем #codefestПриложения для Windows Phone: как мы это делаем #codefest
Приложения для Windows Phone: как мы это делаем #codefest
Actis Wunderman
 
Лекция Android. БД SQLite, ContentProvider, Loader
Лекция Android. БД SQLite, ContentProvider, LoaderЛекция Android. БД SQLite, ContentProvider, Loader
Лекция Android. БД SQLite, ContentProvider, Loader
Александр Брич
 
HSE{Consult}: DevOps – новая методология разработки
HSE{Consult}: DevOps – новая методология разработкиHSE{Consult}: DevOps – новая методология разработки
HSE{Consult}: DevOps – новая методология разработки
Business incubator HSE
 
Влад Ковташ — Yap Database
Влад Ковташ — Yap DatabaseВлад Ковташ — Yap Database
Влад Ковташ — Yap Database
CocoaHeads
 
UWDC 2013, Yii2
UWDC 2013, Yii2UWDC 2013, Yii2
UWDC 2013, Yii2
Alexander Makarov
 

Similar to Laravel websockets (20)

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

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() ставим в очередь задачу на обработку изменений