SlideShare une entreprise Scribd logo
1  sur  50
Télécharger pour lire hors ligne
Symfony i Websockety
A po co mi to?
● Dane w czasie rzeczywistym
A po co mi to?
● Dane w czasie rzeczywistym
● Oszczędność zasobów serwerów
A po co mi to?
● Dane w czasie rzeczywistym
● Oszczędność zasobów serwerów
● Jest rok 2019 i głupio nie stosować :)
Ale że w PHP?
Ano w PHP
Jakie mamy opcje?
Ano w PHP
Jakie mamy opcje?
● Geniuses of Symfony Websocket bundle
Ano w PHP
Jakie mamy opcje?
● Geniuses of Symfony Websocket bundle
● Ratchet
Ano w PHP
Jakie mamy opcje?
● Geniuses of Symfony Websocket bundle
● Ratchet
● Swoole
Ano w PHP
Jakie mamy opcje?
● Geniuses of Symfony Websocket bundle
● Ratchet
● Swoole
Pewnie są jeszcze inne, ale omówimy tylko te 3
GOS Websocket Bundle
GOS WebSocket bundle
● W sumie to Ratchet, ale opakowany w architekturę
Symfony
● Mocna integracja z mechanizmami Symfony
● Dodaje kilka dodatkowych funkcjonalności, których
nie ma w Ratchecie
GOS WebSocket bundle
Instalacja jest w miarę standardowa
● composer require gos/web-socket-bundle
● Dodanie bundla do kernela
● Konfiguracja w yamlu
No i uruchomienie za pomocą:
● php bin/console gos:websocket:server
GOS WebSocket bundle
Po takiej konfiguracji serwer oczywiście nic nie
potrafi :) W następnej kolejności należy:
● Opcjonalnie zbudować wbudowane assety z
biblioteką autobahn i integracją
● Skonfigurować serwisy RCP, zarejestrować je,
skonfigurować router, stworzyć serwisy „tematów”,
stworzyć kontrolery, skonfigurować firewall, no i
autoryzację
● I tak dalej i tak dalej...
GOS WebSocket bundle - Plusy
● Zintegrowane z Symfony – co powoduje, że
aplikacja wygląda na spójną
● Jeśli uda się zrobić to co chcemy, zaoszczędzi nam
sporo kodowania
● Dołącza pomocne biblioteki JS, które niektórym
mogą się przydać
GOS WebSocket bundle - Minusy
● Niepełna, kiepska i miejscami błędna dokumentacja
● Brak dobrych przykładów bardziej skomplikowanych
aplikacji z których można podpatrzeć pewne
rozwiązania
● Jeśli będziemy chcieli zrobić coś, co nie do końca
zostało przewidziane przez autorów, możliwe, że
będziemy musieli napisać więcej kodu walcząc z
biblioteką niż napisalibyśmy pomijając ją
GOS WebSocket bundle - Minusy
● Implementacja jest dosyć zawiła i trudno ją
zrozumieć
● Jest bardzo zintegrowana z Symfony – kiepsko jeśli
upgrade Symfony zepsuje nasz kod
● Z jakiegoś powodu zżera CPU podczas
bezczynności
● Konfiguracja bindowania do IP pozwala tylko na
bindowanie IP, nie pozwala na bindowanie nazw
hostów, powodzenia w dockeryzacji
Ratchet
Ratchet
● Framework do Websocketów w PHP
● Brak powiązań z frameworkami
● Wygląda stabilnie
Ale ma pewną wadę
Ratchet
Trzeba napisać wrapper, który umożliwi korzystanie
z niego :)
Ratchet
Trzeba napisać wrapper, który umożliwi korzystanie
z niego :)
A może to jednak nie wada ;)?
Ratchet
Czasami napisanie własnej implementacji w miarę
prostej funkcjonalności może przynieść więcej
korzyści niż użycie już gotowej, ale kiepskiej.
Ratchet
Integracja z Symfony…
Ratchet
Integracja z Symfony…
Proste, wystarczy uruchomić serwer w konsolowej
komendzie ;)
Ratchet
Ratchet - Plusy
● Wygląda na najmniej skomplikowane rozwiązanie
● Pozwala na elastyczność podczas implementacji
Ratchet - Minusy
● Trzeba napisać swój wrapper
● Wewnętrzna struktura Ratcheta jest dosyć osobliwa
i również ciężko ją zrozumieć
Swoole
Swoole
● Extension do PHP
● Bardzo szybki
● Oferuje wiele funkcjonalności, w tym websockety
Swoole
Sposób działania jest dosyć podobny do Ratcheta,
więc można napisać wspólny wrapper obsługujący
zarówno Ratcheta i Swoole :)
Swoole
Swoole domyślnie działa w wielu procesach, co
powoduje, że jest szybki!
Swoole
Swoole domyślnie działa w wielu procesach, co
powoduje, że jest szybki!
Powoduje to również brak możliwości zapisywania
stanu serwera w zwykłych zmiennych :)
Można ograniczyć ilość procesów do jednego, co
pozwoli na używanie zwykłych zmiennych, jednak
wpłynie to na wydajność serwera
Swoole - Plusy
● Jest naprawdę szybki!
● Również pozwala na elastyczność podczas
implementacji
Swoole - Minusy
● Dodatek powstał w Chinach – może się to nie
podobać niektórym klientom
● Domyślne wsparcie wielu procesów potrafi
skomplikować zapisywanie stanu serwera
Problemy
Problemy
Istnieje kilka problemów, które dotyczą wszystkich
trzech rozwiązań
Problemy
Stateless VS Stateful
● Stateful – rozwiązanie trzymające stan serwera w
celu działania na przykład autoryzacji
Szybkie i proste, ale ciężkie w skalowaniu i
zapewnieniu ciągłości połączenia
Problemy
Stateless VS Stateful
● Stateless – rozwiązanie, które wymaga autoryzacji
przy każdej wiadomości
Nie wymaga ciągłości połączenia, łatwiejsze do
skalowania, ale wymaga warstwy do zapisu
niektórych informacji
Problemy
Jest jednak jeszcze coś :)
Problemy
Jest jednak jeszcze coś :)
Problemy z pamięcią
Problemy
PHP może i dałby radę działać ciągle udostępniając
serwer websocketów, może nawet i z Symfony,
jednak … nie z Doctrine
Problemy
X – ilość wiadomości
Y – zajęta pamięć w bajtach
Problemy
X – ilość wiadomości
Y – zajęta pamięć w bajtach
Podsumujmy
Nadaje się czy nie?
Chyba jeszcze nie, ale są można sobie poradzić
Nadaje się czy nie?
Chyba jeszcze nie, ale są można sobie poradzić
● Restartować serwery co jakiś czas – ale ciężko
zapewnić, że żadna wiadomość nie zostanie
pominięta
● Można spróbować użyć SSE zamiast websocketów,
ale ciężko o dokumentację, stabilne biblioteki, a
poza tym raczej większość problemów pozostanie
Nadaje się czy nie?
● Można napisać serwer websocketów w innym
języku i przekazywać wiadomości do kolejki,
przetwarzać ją w php i odsyłać odpowiedzi do
kolejki, które są następnie wysyłane, ale to wpływa
na wydajność i raczej pozbawia websockety ich
głównych zalet
● No i można nadal używać zwykłych requestów
pomijając całkowicie websockety ;)
To by było na tyle
Czas na pytania!
To by było na tyle
Dziękuję :)

Contenu connexe

Tendances

Szybkie stawianie aplikacji z Elastic Beanstalk
Szybkie stawianie aplikacji z Elastic BeanstalkSzybkie stawianie aplikacji z Elastic Beanstalk
Szybkie stawianie aplikacji z Elastic BeanstalkThe Software House
 
Metaprogramowanie w JS
Metaprogramowanie w JSMetaprogramowanie w JS
Metaprogramowanie w JSDawid Rusnak
 
Aplikacje internetowe real-time w oparciu o React/Redux
Aplikacje internetowe real-time w oparciu o React/ReduxAplikacje internetowe real-time w oparciu o React/Redux
Aplikacje internetowe real-time w oparciu o React/ReduxDawid Rusnak
 
Kubernetes: from zero to be hero
Kubernetes: from zero to be heroKubernetes: from zero to be hero
Kubernetes: from zero to be heroThe Software House
 
Full Stack JavaScript case study na podstawie Maracuya Jukebox audio player
Full Stack JavaScript case study na podstawie Maracuya Jukebox audio playerFull Stack JavaScript case study na podstawie Maracuya Jukebox audio player
Full Stack JavaScript case study na podstawie Maracuya Jukebox audio playerMarek Będkowski
 
Ansible - Automatyzacja zadań IT
Ansible - Automatyzacja zadań ITAnsible - Automatyzacja zadań IT
Ansible - Automatyzacja zadań ITKamil Grabowski
 
Kubernetes - 0 do 1 - 4Developers Warszawa 2019
Kubernetes - 0 do 1 - 4Developers Warszawa 2019Kubernetes - 0 do 1 - 4Developers Warszawa 2019
Kubernetes - 0 do 1 - 4Developers Warszawa 2019Michał Kurzeja
 
Websites vs Cloud Services - OLMUG
Websites vs Cloud Services - OLMUGWebsites vs Cloud Services - OLMUG
Websites vs Cloud Services - OLMUGBart Zaremba
 
Uruchomienie i praca z laravel w wirtualnym kontenerze docker'a
Uruchomienie i praca z laravel w wirtualnym kontenerze docker'aUruchomienie i praca z laravel w wirtualnym kontenerze docker'a
Uruchomienie i praca z laravel w wirtualnym kontenerze docker'aLaravel Poland MeetUp
 
Laravel Poznań Meetup #3 - Uruchomienie i praca z Laravel w wirtualnym konten...
Laravel Poznań Meetup #3 - Uruchomienie i praca z Laravel w wirtualnym konten...Laravel Poznań Meetup #3 - Uruchomienie i praca z Laravel w wirtualnym konten...
Laravel Poznań Meetup #3 - Uruchomienie i praca z Laravel w wirtualnym konten...HighSolutions Sp. z o.o.
 
LXC - kontener pingwinów
LXC - kontener pingwinówLXC - kontener pingwinów
LXC - kontener pingwinówgnosek
 
GWINT: Przetwarzanie rozproszone z wykorzystaniem komunikacji asynchronicznej...
GWINT: Przetwarzanie rozproszone z wykorzystaniem komunikacji asynchronicznej...GWINT: Przetwarzanie rozproszone z wykorzystaniem komunikacji asynchronicznej...
GWINT: Przetwarzanie rozproszone z wykorzystaniem komunikacji asynchronicznej...GOG.com dev team
 
Dystrybucja gier w świecie online, przykład architektury webowego systemu ro...
Dystrybucja gier w świecie online, przykład architektury webowego systemu ro...Dystrybucja gier w świecie online, przykład architektury webowego systemu ro...
Dystrybucja gier w świecie online, przykład architektury webowego systemu ro...GOG.com dev team
 
Jak wydaliśmy wiedźmina, GOG.com IT
Jak wydaliśmy wiedźmina, GOG.com ITJak wydaliśmy wiedźmina, GOG.com IT
Jak wydaliśmy wiedźmina, GOG.com ITGOG.com dev team
 

Tendances (20)

Szybkie stawianie aplikacji z Elastic Beanstalk
Szybkie stawianie aplikacji z Elastic BeanstalkSzybkie stawianie aplikacji z Elastic Beanstalk
Szybkie stawianie aplikacji z Elastic Beanstalk
 
Metaprogramowanie w JS
Metaprogramowanie w JSMetaprogramowanie w JS
Metaprogramowanie w JS
 
Infrastructure As Code
Infrastructure As CodeInfrastructure As Code
Infrastructure As Code
 
Aplikacje internetowe real-time w oparciu o React/Redux
Aplikacje internetowe real-time w oparciu o React/ReduxAplikacje internetowe real-time w oparciu o React/Redux
Aplikacje internetowe real-time w oparciu o React/Redux
 
Kubernetes: from zero to be hero
Kubernetes: from zero to be heroKubernetes: from zero to be hero
Kubernetes: from zero to be hero
 
Ansible w praktyce
Ansible w praktyceAnsible w praktyce
Ansible w praktyce
 
Monitoring sieci
Monitoring sieciMonitoring sieci
Monitoring sieci
 
Full Stack JavaScript case study na podstawie Maracuya Jukebox audio player
Full Stack JavaScript case study na podstawie Maracuya Jukebox audio playerFull Stack JavaScript case study na podstawie Maracuya Jukebox audio player
Full Stack JavaScript case study na podstawie Maracuya Jukebox audio player
 
Rundeck & Ansible
Rundeck & AnsibleRundeck & Ansible
Rundeck & Ansible
 
Ansible - Automatyzacja zadań IT
Ansible - Automatyzacja zadań ITAnsible - Automatyzacja zadań IT
Ansible - Automatyzacja zadań IT
 
Kubernetes - 0 do 1 - 4Developers Warszawa 2019
Kubernetes - 0 do 1 - 4Developers Warszawa 2019Kubernetes - 0 do 1 - 4Developers Warszawa 2019
Kubernetes - 0 do 1 - 4Developers Warszawa 2019
 
Środowisko PWA
Środowisko PWAŚrodowisko PWA
Środowisko PWA
 
Websites vs Cloud Services - OLMUG
Websites vs Cloud Services - OLMUGWebsites vs Cloud Services - OLMUG
Websites vs Cloud Services - OLMUG
 
Laravel 8.0 - co nowego?
Laravel 8.0 - co nowego?Laravel 8.0 - co nowego?
Laravel 8.0 - co nowego?
 
Uruchomienie i praca z laravel w wirtualnym kontenerze docker'a
Uruchomienie i praca z laravel w wirtualnym kontenerze docker'aUruchomienie i praca z laravel w wirtualnym kontenerze docker'a
Uruchomienie i praca z laravel w wirtualnym kontenerze docker'a
 
Laravel Poznań Meetup #3 - Uruchomienie i praca z Laravel w wirtualnym konten...
Laravel Poznań Meetup #3 - Uruchomienie i praca z Laravel w wirtualnym konten...Laravel Poznań Meetup #3 - Uruchomienie i praca z Laravel w wirtualnym konten...
Laravel Poznań Meetup #3 - Uruchomienie i praca z Laravel w wirtualnym konten...
 
LXC - kontener pingwinów
LXC - kontener pingwinówLXC - kontener pingwinów
LXC - kontener pingwinów
 
GWINT: Przetwarzanie rozproszone z wykorzystaniem komunikacji asynchronicznej...
GWINT: Przetwarzanie rozproszone z wykorzystaniem komunikacji asynchronicznej...GWINT: Przetwarzanie rozproszone z wykorzystaniem komunikacji asynchronicznej...
GWINT: Przetwarzanie rozproszone z wykorzystaniem komunikacji asynchronicznej...
 
Dystrybucja gier w świecie online, przykład architektury webowego systemu ro...
Dystrybucja gier w świecie online, przykład architektury webowego systemu ro...Dystrybucja gier w świecie online, przykład architektury webowego systemu ro...
Dystrybucja gier w świecie online, przykład architektury webowego systemu ro...
 
Jak wydaliśmy wiedźmina, GOG.com IT
Jak wydaliśmy wiedźmina, GOG.com ITJak wydaliśmy wiedźmina, GOG.com IT
Jak wydaliśmy wiedźmina, GOG.com IT
 

Similaire à Websockety w PHP

Nowości w drupal 9 i 10 [PL]
Nowości w drupal 9 i 10 [PL]Nowości w drupal 9 i 10 [PL]
Nowości w drupal 9 i 10 [PL]Droptica
 
The story of GOG.com Cache - PHPers 2014 ( PL )
 The story of GOG.com Cache - PHPers 2014 ( PL ) The story of GOG.com Cache - PHPers 2014 ( PL )
The story of GOG.com Cache - PHPers 2014 ( PL )GOG.com dev team
 
The story of GOG.com Cache - 4developers 2014 ( PL )
The story of GOG.com Cache - 4developers 2014 ( PL )The story of GOG.com Cache - 4developers 2014 ( PL )
The story of GOG.com Cache - 4developers 2014 ( PL )GOG.com dev team
 
Extjs & netzke
Extjs & netzkeExtjs & netzke
Extjs & netzkeGaldoMedia
 
CI oraz CD w złożonym projekcie o małym budżecie
CI oraz CD w złożonym projekcie o małym budżecieCI oraz CD w złożonym projekcie o małym budżecie
CI oraz CD w złożonym projekcie o małym budżecieGrzegorz Godlewski
 
Programowanie na wiele platform mobilnych - 2012
Programowanie na wiele platform mobilnych - 2012Programowanie na wiele platform mobilnych - 2012
Programowanie na wiele platform mobilnych - 2012Cezary Walenciuk
 
KraQA #22, Filip Cynarski - Selenium Grid w chmurze Amazon Web Services
KraQA #22, Filip Cynarski -  Selenium Grid w chmurze Amazon Web ServicesKraQA #22, Filip Cynarski -  Selenium Grid w chmurze Amazon Web Services
KraQA #22, Filip Cynarski - Selenium Grid w chmurze Amazon Web Serviceskraqa
 
PSD2WP: kodowanie dedykowanych motywów dla WordPressa w modelu komponentowym
PSD2WP: kodowanie dedykowanych motywów dla WordPressa w modelu komponentowymPSD2WP: kodowanie dedykowanych motywów dla WordPressa w modelu komponentowym
PSD2WP: kodowanie dedykowanych motywów dla WordPressa w modelu komponentowymKrzysztof Łęcki
 
Jak stworzyć udany system informatyczny
Jak stworzyć udany system informatycznyJak stworzyć udany system informatyczny
Jak stworzyć udany system informatycznyqbeuek
 
PLNOG16: Czy każdy administrator sieci zostanie programistą, Sławomir Januk...
PLNOG16: Czy każdy administrator sieci zostanie programistą, Sławomir Januk...PLNOG16: Czy każdy administrator sieci zostanie programistą, Sławomir Januk...
PLNOG16: Czy każdy administrator sieci zostanie programistą, Sławomir Januk...PROIDEA
 
Laravel Poznań Meetup #12 - "Laravel 6.0 - co nowego?"
Laravel Poznań Meetup #12 - "Laravel 6.0 - co nowego?"Laravel Poznań Meetup #12 - "Laravel 6.0 - co nowego?"
Laravel Poznań Meetup #12 - "Laravel 6.0 - co nowego?"HighSolutions Sp. z o.o.
 
Jak Twoja strona może wygenerować niespodziewane koszta
Jak Twoja strona może wygenerować niespodziewane kosztaJak Twoja strona może wygenerować niespodziewane koszta
Jak Twoja strona może wygenerować niespodziewane kosztaTomasz Dziuda
 
WordPress 2015 - Wróżby, kabały, przepowiednie - WordUp Trójmiasto #1
WordPress 2015 - Wróżby, kabały, przepowiednie - WordUp Trójmiasto #1WordPress 2015 - Wróżby, kabały, przepowiednie - WordUp Trójmiasto #1
WordPress 2015 - Wróżby, kabały, przepowiednie - WordUp Trójmiasto #1Mariusz Szatkowski
 
Zbyszek Rzepka: GameDev od zaplecza
Zbyszek Rzepka: GameDev od zapleczaZbyszek Rzepka: GameDev od zaplecza
Zbyszek Rzepka: GameDev od zapleczaGameDesire Academy
 
Jak migrować kod legacy do Symfony? Tips & tricks
Jak migrować kod legacy do Symfony? Tips & tricksJak migrować kod legacy do Symfony? Tips & tricks
Jak migrować kod legacy do Symfony? Tips & tricksXSolve
 
Optymalizacja Wordpress jedną wtyczką - SEMURAI on AIR #1
Optymalizacja Wordpress jedną wtyczką - SEMURAI on AIR #1Optymalizacja Wordpress jedną wtyczką - SEMURAI on AIR #1
Optymalizacja Wordpress jedną wtyczką - SEMURAI on AIR #1Tomasz Stopka
 

Similaire à Websockety w PHP (20)

Nowości w drupal 9 i 10 [PL]
Nowości w drupal 9 i 10 [PL]Nowości w drupal 9 i 10 [PL]
Nowości w drupal 9 i 10 [PL]
 
The story of GOG.com Cache - PHPers 2014 ( PL )
 The story of GOG.com Cache - PHPers 2014 ( PL ) The story of GOG.com Cache - PHPers 2014 ( PL )
The story of GOG.com Cache - PHPers 2014 ( PL )
 
The story of GOG.com Cache - 4developers 2014 ( PL )
The story of GOG.com Cache - 4developers 2014 ( PL )The story of GOG.com Cache - 4developers 2014 ( PL )
The story of GOG.com Cache - 4developers 2014 ( PL )
 
Extjs & netzke
Extjs & netzkeExtjs & netzke
Extjs & netzke
 
CI oraz CD w złożonym projekcie o małym budżecie
CI oraz CD w złożonym projekcie o małym budżecieCI oraz CD w złożonym projekcie o małym budżecie
CI oraz CD w złożonym projekcie o małym budżecie
 
Programowanie na wiele platform mobilnych - 2012
Programowanie na wiele platform mobilnych - 2012Programowanie na wiele platform mobilnych - 2012
Programowanie na wiele platform mobilnych - 2012
 
KraQA #22, Filip Cynarski - Selenium Grid w chmurze Amazon Web Services
KraQA #22, Filip Cynarski -  Selenium Grid w chmurze Amazon Web ServicesKraQA #22, Filip Cynarski -  Selenium Grid w chmurze Amazon Web Services
KraQA #22, Filip Cynarski - Selenium Grid w chmurze Amazon Web Services
 
PSD2WP: kodowanie dedykowanych motywów dla WordPressa w modelu komponentowym
PSD2WP: kodowanie dedykowanych motywów dla WordPressa w modelu komponentowymPSD2WP: kodowanie dedykowanych motywów dla WordPressa w modelu komponentowym
PSD2WP: kodowanie dedykowanych motywów dla WordPressa w modelu komponentowym
 
Feo w-joomla
Feo w-joomlaFeo w-joomla
Feo w-joomla
 
Jak stworzyć udany system informatyczny
Jak stworzyć udany system informatycznyJak stworzyć udany system informatyczny
Jak stworzyć udany system informatyczny
 
PLNOG16: Czy każdy administrator sieci zostanie programistą, Sławomir Januk...
PLNOG16: Czy każdy administrator sieci zostanie programistą, Sławomir Januk...PLNOG16: Czy każdy administrator sieci zostanie programistą, Sławomir Januk...
PLNOG16: Czy każdy administrator sieci zostanie programistą, Sławomir Januk...
 
Laravel Poznań Meetup #12 - "Laravel 6.0 - co nowego?"
Laravel Poznań Meetup #12 - "Laravel 6.0 - co nowego?"Laravel Poznań Meetup #12 - "Laravel 6.0 - co nowego?"
Laravel Poznań Meetup #12 - "Laravel 6.0 - co nowego?"
 
Laravel 6.0 - co nowego?
Laravel 6.0 - co nowego?Laravel 6.0 - co nowego?
Laravel 6.0 - co nowego?
 
Jak Twoja strona może wygenerować niespodziewane koszta
Jak Twoja strona może wygenerować niespodziewane kosztaJak Twoja strona może wygenerować niespodziewane koszta
Jak Twoja strona może wygenerować niespodziewane koszta
 
WordPress 2015 - Wróżby, kabały, przepowiednie - WordUp Trójmiasto #1
WordPress 2015 - Wróżby, kabały, przepowiednie - WordUp Trójmiasto #1WordPress 2015 - Wróżby, kabały, przepowiednie - WordUp Trójmiasto #1
WordPress 2015 - Wróżby, kabały, przepowiednie - WordUp Trójmiasto #1
 
Zbyszek Rzepka: GameDev od zaplecza
Zbyszek Rzepka: GameDev od zapleczaZbyszek Rzepka: GameDev od zaplecza
Zbyszek Rzepka: GameDev od zaplecza
 
Webinar symfony
Webinar symfonyWebinar symfony
Webinar symfony
 
Jak migrować kod legacy do Symfony? Tips & tricks
Jak migrować kod legacy do Symfony? Tips & tricksJak migrować kod legacy do Symfony? Tips & tricks
Jak migrować kod legacy do Symfony? Tips & tricks
 
Optymalizacja Wordpress jedną wtyczką - SEMURAI on AIR #1
Optymalizacja Wordpress jedną wtyczką - SEMURAI on AIR #1Optymalizacja Wordpress jedną wtyczką - SEMURAI on AIR #1
Optymalizacja Wordpress jedną wtyczką - SEMURAI on AIR #1
 
JavaScript, Moduły
JavaScript, ModułyJavaScript, Moduły
JavaScript, Moduły
 

Plus de The Software House

Jak kraść miliony, czyli o błędach bezpieczeństwa, które mogą spotkać również...
Jak kraść miliony, czyli o błędach bezpieczeństwa, które mogą spotkać również...Jak kraść miliony, czyli o błędach bezpieczeństwa, które mogą spotkać również...
Jak kraść miliony, czyli o błędach bezpieczeństwa, które mogą spotkać również...The Software House
 
Jak efektywnie podejść do certyfikacji w AWS?
Jak efektywnie podejść do certyfikacji w AWS?Jak efektywnie podejść do certyfikacji w AWS?
Jak efektywnie podejść do certyfikacji w AWS?The Software House
 
O co chodzi z tą dostępnością cyfrową?
O co chodzi z tą dostępnością cyfrową?O co chodzi z tą dostępnością cyfrową?
O co chodzi z tą dostępnością cyfrową?The Software House
 
Chat tekstowy z użyciem Amazon Chime
Chat tekstowy z użyciem Amazon ChimeChat tekstowy z użyciem Amazon Chime
Chat tekstowy z użyciem Amazon ChimeThe Software House
 
Jak nie zwariować z architekturą Serverless?
Jak nie zwariować z architekturą Serverless?Jak nie zwariować z architekturą Serverless?
Jak nie zwariować z architekturą Serverless?The Software House
 
Analiza semantyczna artykułów prasowych w 5 sprintów z użyciem AWS
Analiza semantyczna artykułów prasowych w 5 sprintów z użyciem AWSAnaliza semantyczna artykułów prasowych w 5 sprintów z użyciem AWS
Analiza semantyczna artykułów prasowych w 5 sprintów z użyciem AWSThe Software House
 
Feature flags na ratunek projektu w JavaScript
Feature flags na ratunek projektu w JavaScriptFeature flags na ratunek projektu w JavaScript
Feature flags na ratunek projektu w JavaScriptThe Software House
 
Typowanie nominalne w TypeScript
Typowanie nominalne w TypeScriptTypowanie nominalne w TypeScript
Typowanie nominalne w TypeScriptThe Software House
 
Automatyzacja tworzenia frontendu z wykorzystaniem GraphQL
Automatyzacja tworzenia frontendu z wykorzystaniem GraphQLAutomatyzacja tworzenia frontendu z wykorzystaniem GraphQL
Automatyzacja tworzenia frontendu z wykorzystaniem GraphQLThe Software House
 
Serverless Compose vs hurtownia danych
Serverless Compose vs hurtownia danychServerless Compose vs hurtownia danych
Serverless Compose vs hurtownia danychThe Software House
 
Testy API: połączenie z bazą danych czy implementacja w pamięci
Testy API: połączenie z bazą danych czy implementacja w pamięciTesty API: połączenie z bazą danych czy implementacja w pamięci
Testy API: połączenie z bazą danych czy implementacja w pamięciThe Software House
 
Jak skutecznie read model. Case study
Jak skutecznie read model. Case studyJak skutecznie read model. Case study
Jak skutecznie read model. Case studyThe Software House
 
Firestore czyli ognista baza od giganta z Doliny Krzemowej
Firestore czyli ognista baza od giganta z Doliny KrzemowejFirestore czyli ognista baza od giganta z Doliny Krzemowej
Firestore czyli ognista baza od giganta z Doliny KrzemowejThe Software House
 
Jak utrzymać stado Lambd w ryzach
Jak utrzymać stado Lambd w ryzachJak utrzymać stado Lambd w ryzach
Jak utrzymać stado Lambd w ryzachThe Software House
 
O łączeniu Storyblok i Next.js
O łączeniu Storyblok i Next.jsO łączeniu Storyblok i Next.js
O łączeniu Storyblok i Next.jsThe Software House
 
Amazon Step Functions. Sposób na implementację procesów w chmurze
Amazon Step Functions. Sposób na implementację procesów w chmurzeAmazon Step Functions. Sposób na implementację procesów w chmurze
Amazon Step Functions. Sposób na implementację procesów w chmurzeThe Software House
 
Od Figmy do gotowej aplikacji bez linijki kodu
Od Figmy do gotowej aplikacji bez linijki koduOd Figmy do gotowej aplikacji bez linijki kodu
Od Figmy do gotowej aplikacji bez linijki koduThe Software House
 

Plus de The Software House (20)

Jak kraść miliony, czyli o błędach bezpieczeństwa, które mogą spotkać również...
Jak kraść miliony, czyli o błędach bezpieczeństwa, które mogą spotkać również...Jak kraść miliony, czyli o błędach bezpieczeństwa, które mogą spotkać również...
Jak kraść miliony, czyli o błędach bezpieczeństwa, które mogą spotkać również...
 
Uszanowanko Podsumowanko
Uszanowanko PodsumowankoUszanowanko Podsumowanko
Uszanowanko Podsumowanko
 
Jak efektywnie podejść do certyfikacji w AWS?
Jak efektywnie podejść do certyfikacji w AWS?Jak efektywnie podejść do certyfikacji w AWS?
Jak efektywnie podejść do certyfikacji w AWS?
 
O co chodzi z tą dostępnością cyfrową?
O co chodzi z tą dostępnością cyfrową?O co chodzi z tą dostępnością cyfrową?
O co chodzi z tą dostępnością cyfrową?
 
Chat tekstowy z użyciem Amazon Chime
Chat tekstowy z użyciem Amazon ChimeChat tekstowy z użyciem Amazon Chime
Chat tekstowy z użyciem Amazon Chime
 
Migracje danych serverless
Migracje danych serverlessMigracje danych serverless
Migracje danych serverless
 
Jak nie zwariować z architekturą Serverless?
Jak nie zwariować z architekturą Serverless?Jak nie zwariować z architekturą Serverless?
Jak nie zwariować z architekturą Serverless?
 
Analiza semantyczna artykułów prasowych w 5 sprintów z użyciem AWS
Analiza semantyczna artykułów prasowych w 5 sprintów z użyciem AWSAnaliza semantyczna artykułów prasowych w 5 sprintów z użyciem AWS
Analiza semantyczna artykułów prasowych w 5 sprintów z użyciem AWS
 
Feature flags na ratunek projektu w JavaScript
Feature flags na ratunek projektu w JavaScriptFeature flags na ratunek projektu w JavaScript
Feature flags na ratunek projektu w JavaScript
 
Typowanie nominalne w TypeScript
Typowanie nominalne w TypeScriptTypowanie nominalne w TypeScript
Typowanie nominalne w TypeScript
 
Automatyzacja tworzenia frontendu z wykorzystaniem GraphQL
Automatyzacja tworzenia frontendu z wykorzystaniem GraphQLAutomatyzacja tworzenia frontendu z wykorzystaniem GraphQL
Automatyzacja tworzenia frontendu z wykorzystaniem GraphQL
 
Serverless Compose vs hurtownia danych
Serverless Compose vs hurtownia danychServerless Compose vs hurtownia danych
Serverless Compose vs hurtownia danych
 
Testy API: połączenie z bazą danych czy implementacja w pamięci
Testy API: połączenie z bazą danych czy implementacja w pamięciTesty API: połączenie z bazą danych czy implementacja w pamięci
Testy API: połączenie z bazą danych czy implementacja w pamięci
 
Jak skutecznie read model. Case study
Jak skutecznie read model. Case studyJak skutecznie read model. Case study
Jak skutecznie read model. Case study
 
Firestore czyli ognista baza od giganta z Doliny Krzemowej
Firestore czyli ognista baza od giganta z Doliny KrzemowejFirestore czyli ognista baza od giganta z Doliny Krzemowej
Firestore czyli ognista baza od giganta z Doliny Krzemowej
 
Jak utrzymać stado Lambd w ryzach
Jak utrzymać stado Lambd w ryzachJak utrzymać stado Lambd w ryzach
Jak utrzymać stado Lambd w ryzach
 
Jak poskromić AWS?
Jak poskromić AWS?Jak poskromić AWS?
Jak poskromić AWS?
 
O łączeniu Storyblok i Next.js
O łączeniu Storyblok i Next.jsO łączeniu Storyblok i Next.js
O łączeniu Storyblok i Next.js
 
Amazon Step Functions. Sposób na implementację procesów w chmurze
Amazon Step Functions. Sposób na implementację procesów w chmurzeAmazon Step Functions. Sposób na implementację procesów w chmurze
Amazon Step Functions. Sposób na implementację procesów w chmurze
 
Od Figmy do gotowej aplikacji bez linijki kodu
Od Figmy do gotowej aplikacji bez linijki koduOd Figmy do gotowej aplikacji bez linijki kodu
Od Figmy do gotowej aplikacji bez linijki kodu
 

Websockety w PHP

  • 2. A po co mi to? ● Dane w czasie rzeczywistym
  • 3. A po co mi to? ● Dane w czasie rzeczywistym ● Oszczędność zasobów serwerów
  • 4. A po co mi to? ● Dane w czasie rzeczywistym ● Oszczędność zasobów serwerów ● Jest rok 2019 i głupio nie stosować :)
  • 5. Ale że w PHP?
  • 6. Ano w PHP Jakie mamy opcje?
  • 7. Ano w PHP Jakie mamy opcje? ● Geniuses of Symfony Websocket bundle
  • 8. Ano w PHP Jakie mamy opcje? ● Geniuses of Symfony Websocket bundle ● Ratchet
  • 9. Ano w PHP Jakie mamy opcje? ● Geniuses of Symfony Websocket bundle ● Ratchet ● Swoole
  • 10. Ano w PHP Jakie mamy opcje? ● Geniuses of Symfony Websocket bundle ● Ratchet ● Swoole Pewnie są jeszcze inne, ale omówimy tylko te 3
  • 12. GOS WebSocket bundle ● W sumie to Ratchet, ale opakowany w architekturę Symfony ● Mocna integracja z mechanizmami Symfony ● Dodaje kilka dodatkowych funkcjonalności, których nie ma w Ratchecie
  • 13. GOS WebSocket bundle Instalacja jest w miarę standardowa ● composer require gos/web-socket-bundle ● Dodanie bundla do kernela ● Konfiguracja w yamlu No i uruchomienie za pomocą: ● php bin/console gos:websocket:server
  • 14. GOS WebSocket bundle Po takiej konfiguracji serwer oczywiście nic nie potrafi :) W następnej kolejności należy: ● Opcjonalnie zbudować wbudowane assety z biblioteką autobahn i integracją ● Skonfigurować serwisy RCP, zarejestrować je, skonfigurować router, stworzyć serwisy „tematów”, stworzyć kontrolery, skonfigurować firewall, no i autoryzację ● I tak dalej i tak dalej...
  • 15.
  • 16. GOS WebSocket bundle - Plusy ● Zintegrowane z Symfony – co powoduje, że aplikacja wygląda na spójną ● Jeśli uda się zrobić to co chcemy, zaoszczędzi nam sporo kodowania ● Dołącza pomocne biblioteki JS, które niektórym mogą się przydać
  • 17. GOS WebSocket bundle - Minusy ● Niepełna, kiepska i miejscami błędna dokumentacja ● Brak dobrych przykładów bardziej skomplikowanych aplikacji z których można podpatrzeć pewne rozwiązania ● Jeśli będziemy chcieli zrobić coś, co nie do końca zostało przewidziane przez autorów, możliwe, że będziemy musieli napisać więcej kodu walcząc z biblioteką niż napisalibyśmy pomijając ją
  • 18. GOS WebSocket bundle - Minusy ● Implementacja jest dosyć zawiła i trudno ją zrozumieć ● Jest bardzo zintegrowana z Symfony – kiepsko jeśli upgrade Symfony zepsuje nasz kod ● Z jakiegoś powodu zżera CPU podczas bezczynności ● Konfiguracja bindowania do IP pozwala tylko na bindowanie IP, nie pozwala na bindowanie nazw hostów, powodzenia w dockeryzacji
  • 20. Ratchet ● Framework do Websocketów w PHP ● Brak powiązań z frameworkami ● Wygląda stabilnie Ale ma pewną wadę
  • 21. Ratchet Trzeba napisać wrapper, który umożliwi korzystanie z niego :)
  • 22. Ratchet Trzeba napisać wrapper, który umożliwi korzystanie z niego :) A może to jednak nie wada ;)?
  • 23. Ratchet Czasami napisanie własnej implementacji w miarę prostej funkcjonalności może przynieść więcej korzyści niż użycie już gotowej, ale kiepskiej.
  • 25. Ratchet Integracja z Symfony… Proste, wystarczy uruchomić serwer w konsolowej komendzie ;)
  • 27. Ratchet - Plusy ● Wygląda na najmniej skomplikowane rozwiązanie ● Pozwala na elastyczność podczas implementacji
  • 28. Ratchet - Minusy ● Trzeba napisać swój wrapper ● Wewnętrzna struktura Ratcheta jest dosyć osobliwa i również ciężko ją zrozumieć
  • 30. Swoole ● Extension do PHP ● Bardzo szybki ● Oferuje wiele funkcjonalności, w tym websockety
  • 31. Swoole Sposób działania jest dosyć podobny do Ratcheta, więc można napisać wspólny wrapper obsługujący zarówno Ratcheta i Swoole :)
  • 32. Swoole Swoole domyślnie działa w wielu procesach, co powoduje, że jest szybki!
  • 33. Swoole Swoole domyślnie działa w wielu procesach, co powoduje, że jest szybki! Powoduje to również brak możliwości zapisywania stanu serwera w zwykłych zmiennych :) Można ograniczyć ilość procesów do jednego, co pozwoli na używanie zwykłych zmiennych, jednak wpłynie to na wydajność serwera
  • 34. Swoole - Plusy ● Jest naprawdę szybki! ● Również pozwala na elastyczność podczas implementacji
  • 35. Swoole - Minusy ● Dodatek powstał w Chinach – może się to nie podobać niektórym klientom ● Domyślne wsparcie wielu procesów potrafi skomplikować zapisywanie stanu serwera
  • 37. Problemy Istnieje kilka problemów, które dotyczą wszystkich trzech rozwiązań
  • 38. Problemy Stateless VS Stateful ● Stateful – rozwiązanie trzymające stan serwera w celu działania na przykład autoryzacji Szybkie i proste, ale ciężkie w skalowaniu i zapewnieniu ciągłości połączenia
  • 39. Problemy Stateless VS Stateful ● Stateless – rozwiązanie, które wymaga autoryzacji przy każdej wiadomości Nie wymaga ciągłości połączenia, łatwiejsze do skalowania, ale wymaga warstwy do zapisu niektórych informacji
  • 41. Problemy Jest jednak jeszcze coś :) Problemy z pamięcią
  • 42. Problemy PHP może i dałby radę działać ciągle udostępniając serwer websocketów, może nawet i z Symfony, jednak … nie z Doctrine
  • 43. Problemy X – ilość wiadomości Y – zajęta pamięć w bajtach
  • 44. Problemy X – ilość wiadomości Y – zajęta pamięć w bajtach
  • 46. Nadaje się czy nie? Chyba jeszcze nie, ale są można sobie poradzić
  • 47. Nadaje się czy nie? Chyba jeszcze nie, ale są można sobie poradzić ● Restartować serwery co jakiś czas – ale ciężko zapewnić, że żadna wiadomość nie zostanie pominięta ● Można spróbować użyć SSE zamiast websocketów, ale ciężko o dokumentację, stabilne biblioteki, a poza tym raczej większość problemów pozostanie
  • 48. Nadaje się czy nie? ● Można napisać serwer websocketów w innym języku i przekazywać wiadomości do kolejki, przetwarzać ją w php i odsyłać odpowiedzi do kolejki, które są następnie wysyłane, ale to wpływa na wydajność i raczej pozbawia websockety ich głównych zalet ● No i można nadal używać zwykłych requestów pomijając całkowicie websockety ;)
  • 49. To by było na tyle Czas na pytania!
  • 50. To by było na tyle Dziękuję :)