Tomasz Kajtoch: Dokładnie 2 lata temu została opublikowana specyfikacja protokołu HTTP w wersji drugiej. Mimo wielu zalet, tylko niewielki procent usług w internecie zdecydował się na jego wdrożenie. Moja prelekcja poświęcona będzie praktycznym przykładom i zaletom płynącym z jego użycia pod kątem frontendu oraz porówna go z dotychczas stosowanymi rozwiązaniami.
Tomasz Kajtoch: Dokładnie 2 lata temu została opublikowana specyfikacja protokołu HTTP w wersji drugiej. Mimo wielu zalet, tylko niewielki procent usług w internecie zdecydował się na jego wdrożenie. Moja prelekcja poświęcona będzie praktycznym przykładom i zaletom płynącym z jego użycia pod kątem frontendu oraz porówna go z dotychczas stosowanymi rozwiązaniami.
4Developers 2015: Szybciej niż Struś Pędziwiatr - WebSockets w aplikacjach we...PROIDEA
Krzysztof Rychlicki-Kicior
Language: Polish
Dawno temu, gdy w kodzie HTML królowały znaczniki FONT i MARQUEE, a zamiast AJAX-a stosowano ukryte ramki, błyskawiczną i dwustronną komunikację z serwerem można było osiągnąć jedynie za pomocą specjalnych wtyczek - np. we wszelkiej maści czatach królowała wówczas Java i applety. Z upływem lat sytuacja poprawiła się, dzięki zastosowaniu AJAX-a czy long pollingu, jednak wciąż była daleka od ideału. Na szczęście, obecnie programiści są w znacznie lepszej sytuacji - dzięki WebSocketom bez żadnego problemu są w stanie zaimplementować komunikację w czasie rzeczywistym, niezbędną np. do gier online, aplikacji do komunikacji czy aplikacji finansowych.
W ramach tego wykładu słuchacze zapoznają się z różnymi koncepcjami stosowanymi w komunikacji pomiędzy przeglądarką a serwerem HTTP, z uwzględnieniem WebSocketów. Oprócz tego zostaną przedstawione mechanizmy obsługi WS od strony serwera, na przykładzie Node.js i Socket.IO. Różne rozwiązania zostaną poddane porównaniu pod kątem wydajności. Mimo licznych zalet, WebSockety niosą za sobą pewne problemy - zostaną one również poddane analizie.
RSocket to reaktywny protokół sieciowy wspierany m.in. przez the Linux Foundation i twórców Springa. W Internecie możecie znaleźć dużo hype’u i aplikacji typu hello world, ta prezentacja ma na celu skupienie się bardziej na tym, jak RSocket może wpłynąć na działanie naszych aplikacji. Porozmawiamy, w jaki sposób możemy wycisnąć więcej szybkości z kodu pozostając przy “tradycyjnym” HTTP, ale wprowadzając Server-Sent Events, a także o przypadkach użycia, gdzie RSocket faktycznie wprowadza nową jakość.
Wstęp do projektowania usług internetowych: część 1 - restLukas Lesniewski
Prezentacja ma na celu przedstawienie możliwości, jakie daje mam Java EE. Dzięki zastosowaniu JAX-RS możemy zbudować własną, bezstanową usługę internetową. Tutaj skupiłem się na wykorzystaniu IntelliJ oraz Wildfly, przy czym zamieściłem również krótkie opisy również innych serwerów. Zamieściłem również kod źródłowy, spora część prezentacji to właśnie praca z kodem, począwszy od założenia projektu.
Docker jest wspaniałą technologią. Przy pomocy Dockera w prosty sposób możemy rozwiązać jeden problem, a na jego miejsce stworzyć dwa inne, nowe, bardziej skomplikowane... Co jest powodem takiego stanu rzeczy? Czy przyczyną jest architektura Dockera? Brak zrozumienia? A może coś więcej?
Presentation from 3Camp Tech meeting I took at 2016/11/15.
Asciinema from presentation:
* bower: https://asciinema.org/a/92748
* npm: https://asciinema.org/a/92752
* yarn: https://asciinema.org/a/92771
REST
Web Sockets
Server-sent Events
This presentation has been developed in the context of the Mobile Applications Development course, DISIM, University of L'Aquila (Italy), Spring 2013.
http://www.ivanomalavolta.com
Slides from the talk about abc/job-bundle, Symfony bundle for asynchronous job processing in background. You can find the bundle here: https://github.com/aboutcoders/job-bundle
Demo app that mentioned during the talk where you can check how bundle is configured https://github.com/aboutcoders/job-bundle-skeleton-app
Server Sent Events, Async Servlet, Web Sockets and JSON; born to work together!Masoud Kalali
This session focuses on how Java EE 7 provides extensive set of new and enhanced features to support standards like HTML5, WebSockets, and Server Sent Events among others.In this session we will show how these new features are designed and matched to work together for developing lightweight solutions matching end users high expectation from a web application’s responsiveness. The session will cover best practices and design patterns governing application development using JAX-RS 2.0, Async Servlet, and JSON-P (among others) as well as iterating over the pitfalls that should be avoided. During the session we will show code snippets and block diagrams that clarify use of APIs coming from the demo application we will show at the end.
4Developers 2015: Szybciej niż Struś Pędziwiatr - WebSockets w aplikacjach we...PROIDEA
Krzysztof Rychlicki-Kicior
Language: Polish
Dawno temu, gdy w kodzie HTML królowały znaczniki FONT i MARQUEE, a zamiast AJAX-a stosowano ukryte ramki, błyskawiczną i dwustronną komunikację z serwerem można było osiągnąć jedynie za pomocą specjalnych wtyczek - np. we wszelkiej maści czatach królowała wówczas Java i applety. Z upływem lat sytuacja poprawiła się, dzięki zastosowaniu AJAX-a czy long pollingu, jednak wciąż była daleka od ideału. Na szczęście, obecnie programiści są w znacznie lepszej sytuacji - dzięki WebSocketom bez żadnego problemu są w stanie zaimplementować komunikację w czasie rzeczywistym, niezbędną np. do gier online, aplikacji do komunikacji czy aplikacji finansowych.
W ramach tego wykładu słuchacze zapoznają się z różnymi koncepcjami stosowanymi w komunikacji pomiędzy przeglądarką a serwerem HTTP, z uwzględnieniem WebSocketów. Oprócz tego zostaną przedstawione mechanizmy obsługi WS od strony serwera, na przykładzie Node.js i Socket.IO. Różne rozwiązania zostaną poddane porównaniu pod kątem wydajności. Mimo licznych zalet, WebSockety niosą za sobą pewne problemy - zostaną one również poddane analizie.
RSocket to reaktywny protokół sieciowy wspierany m.in. przez the Linux Foundation i twórców Springa. W Internecie możecie znaleźć dużo hype’u i aplikacji typu hello world, ta prezentacja ma na celu skupienie się bardziej na tym, jak RSocket może wpłynąć na działanie naszych aplikacji. Porozmawiamy, w jaki sposób możemy wycisnąć więcej szybkości z kodu pozostając przy “tradycyjnym” HTTP, ale wprowadzając Server-Sent Events, a także o przypadkach użycia, gdzie RSocket faktycznie wprowadza nową jakość.
Wstęp do projektowania usług internetowych: część 1 - restLukas Lesniewski
Prezentacja ma na celu przedstawienie możliwości, jakie daje mam Java EE. Dzięki zastosowaniu JAX-RS możemy zbudować własną, bezstanową usługę internetową. Tutaj skupiłem się na wykorzystaniu IntelliJ oraz Wildfly, przy czym zamieściłem również krótkie opisy również innych serwerów. Zamieściłem również kod źródłowy, spora część prezentacji to właśnie praca z kodem, począwszy od założenia projektu.
Docker jest wspaniałą technologią. Przy pomocy Dockera w prosty sposób możemy rozwiązać jeden problem, a na jego miejsce stworzyć dwa inne, nowe, bardziej skomplikowane... Co jest powodem takiego stanu rzeczy? Czy przyczyną jest architektura Dockera? Brak zrozumienia? A może coś więcej?
Presentation from 3Camp Tech meeting I took at 2016/11/15.
Asciinema from presentation:
* bower: https://asciinema.org/a/92748
* npm: https://asciinema.org/a/92752
* yarn: https://asciinema.org/a/92771
REST
Web Sockets
Server-sent Events
This presentation has been developed in the context of the Mobile Applications Development course, DISIM, University of L'Aquila (Italy), Spring 2013.
http://www.ivanomalavolta.com
Slides from the talk about abc/job-bundle, Symfony bundle for asynchronous job processing in background. You can find the bundle here: https://github.com/aboutcoders/job-bundle
Demo app that mentioned during the talk where you can check how bundle is configured https://github.com/aboutcoders/job-bundle-skeleton-app
Server Sent Events, Async Servlet, Web Sockets and JSON; born to work together!Masoud Kalali
This session focuses on how Java EE 7 provides extensive set of new and enhanced features to support standards like HTML5, WebSockets, and Server Sent Events among others.In this session we will show how these new features are designed and matched to work together for developing lightweight solutions matching end users high expectation from a web application’s responsiveness. The session will cover best practices and design patterns governing application development using JAX-RS 2.0, Async Servlet, and JSON-P (among others) as well as iterating over the pitfalls that should be avoided. During the session we will show code snippets and block diagrams that clarify use of APIs coming from the demo application we will show at the end.
New Symfony Tips & Tricks (SymfonyCon Paris 2015)Javier Eguiluz
This talk included tens of tips and tricks, new features and rarely used options for Symfony and its ecosystem. Besides the full-stack Symfony framework, other related technologies were mentioned, like Doctrine, Composer, Twig, PHPUnit and Monolog.
A quick overview of tips, tricks and code snippets for developers using Symfony and all its ecosystem, from Monolog to Doctrine. Learn how to become more productive and discover some rarely used options and features.
Adrian Chlubek: Dowiemy się, czym jest Swoole, w jakim celu został stworzony i jakie funkcjonalności oferuje – wszystko to na żywych przykładach. Przede wszystkim jednak spróbujemy odpowiedzieć sobie na pytanie: czy używanie Swoole ma sens?
Repozytorium z przykładami: https://github.com/achlubek/swoole_experiments
Dokumentacja Swoole: https://www.swoole.co.uk/docs/
O prezentacji:
Chcąc uzyskać type safety w projekcie możemy zdecydować się na samodzielne tworzenie, utrzymywane oraz współdzielenie typów. Inną możliwością jest skorzystanie z gotowego rozwiązania (np. generatora typów), które stworzy typy za pomocą komendy. Obie te opcje wymagają jednak dodatkowego nakładu pracy. tRPC niweluje ten problem pozwalając na natychmiastową synchronizację zmian między backendem a frontendem.
Podczas prelekcji opowiem o obecnych możliwościach i ograniczeniach tRPC, a także kiedy warto z tego narzędzia skorzystać. Dodatkowo podczas live codingu pokażę jak szybko i wygodnie można stworzyć API za pomocą tRPC i frameworku Next.js.
O prelegencie:
Karierę w IT zaczęła niecałe 3 lata temu jako programistka React Native. Szybko jednak zaciekawił ją także web dev i backend, co rozpoczęło jej drogę jako programistka full-stack. Uwielbia śledzić i wykorzystywać w projektach nowinki ze świata JavaScriptu. Poza pracą spędza czas uprawiając przeróżne sporty - od treningu siłowego i roweru, poprzez jogę, aż po narty.
Warsztaty: Podstawy PHP
Część 2: Omówienie składni języka PHP (wersja 7)
Prowadzący: Krzysztof Ożóg, CTO Codesushi
Omówienie składni języka PHP (wersja 7):
1) Instalacja interpretera języka PHP
2) Deklaracja zmiennych i stałych
3) Operatory i ich priorytet
4) Struktury kontrolne
5) Definiowanie funkcji
6) Alternatywna składnia, czyli PHP jako system szablonów
7) Model obiektowy
a) Klasy
b) interface -y
c) Dziedziczenie
d) Magic methods
e) Autoloader
f) Obsługa błędów i wyjątków
g) PDO - interface komunikacji z bazami danych
h) Omówienie biblioteki standardowej PHP
i) Omówienie rozszerzenia SPL
j) Standardy PSR
k) Standardy kodowania PSR-1 i PSR-2
l) Composer, standardy PSR-0 i PSR-4 i Packagist
“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...The Software House
Niezależnie od tego, czy jesteście developerami, sysadminami, czy też DevOps Engineers – prawie na pewno mieliście doświadczenie z webowymi panelami dostawców usług infrastrukturalnych takich jak AWS, GCP czy też OVH. Z poziomu tych paneli da się “wyklikać” wszystko, czego potrzeba, ale… czy aby na pewno tędy droga? Środowiskiem bardziej naturalnym dla każdego inżyniera jest wszakże edytor tekstu (czy też IDE) oraz różnorakie polecenia wydawane komputerowi w formie skryptów. Czemu by więc z tego nie skorzystać? Jeśli od klikania bez możliwości pomyłki boli Was ręka, zainwestuj w podkładkę pod mysz… ale przede wszystkim wpadnij na prelekcję Piotra, na której to opowie o założeniach podejścia IaC, jego zaletach oraz przedstawi najpopularniejsze narzędzia.
PLNOG22 - Piotr Stolarek - Bezpieczeństwo użytkowania platform usługowych Tel...PROIDEA
Prelekcja poprzez szybkie nakreślenie architektury platformy Openshift omawia rozwiązania wykorzystane do zabezpieczenia aplikacji działających na kontenerach zarządzanych przez samą platformę. Podczas ich opisu szczególna uwaga zwracana jest na zagadnienia związane z ruchem sieciowym, które mogą mieć istotne znaczenie przy osadzaniu na niej aplikacji usługowych branży telekomunikacyjnej. 1. Wprowadzenie do architektury sieciowej platformy Openshift 2. Wyjaśnienie poprzez jakie mechanizmy architektura Openshift zapewnia bezpieczeństwo oraz integralność aplikacji na niej osadzonych a) separacja na poziomie sieciowym b) separacja na poziomie dostępu do zasobów systemowych oraz dyskowych 3. Sposoby kontroli oraz zabezpieczeń ruchu sieciowego pomiędzy aplikacjami osadzonymi na kontenerach (Istio/Service mesh)
Monitoring systemu. Dlaczego mój kardiolog jest bogatym człowiekiem?The Software House
Wojciech Wójcik: W temacie monitorowania systemów IT powiedziano już oceany słów na niezliczonych prezentacjach. Przedstawię wam jednak opowieść o mitologicznym Prometheuszu. Opowieść, która mogłaby konkurować z Grą o tron, a Koronę Królów zjadłaby na przystawkę. W jej trakcie zdradzę wam sekrety monitorowania Kubernetes, ale i nie tylko. Miejcie jednak na uwadze, że nie wszystkie potyczki się wygrywa – dzięki czemu zaszczycę was też możliwością wysłuchania ciekawych historii o fuckupach.
7. Słów kilka o czasach dostępu czyli IO vs CPU
http://norvig.com/21-days.html#answers
fetch from L1 cache memory 0.5 nanosec
fetch from L2 cache memory 7 nanosec
fetch from main memory 100 nanosec
send 2K bytes over 1Gbps network 20,000 nanosec
read 1MB sequentially from memory 0,25 ms = 250,000 ns
Read 1 MB sequentially from SSD* 1 ms
Disk seek 10 ms
Read 1 MB sequentially from disk 20 ms
send packet US to Europe and back 150 ms
* Assuming ~1GB/sec SSD
11. Node.JS - webserver “hello world”
var http = require('http');
var server = new http.Server();
server.on('request', function (req, res) {
res.writeHead(
200,
{'Content-Type':'text/plain'}
);
res.end('Hello World');
});
server.listen(8000, '127.0.0.1');
12. Node.JS - webserver “hello world”
var http = require('http');
var server = new http.Server();
server.on('request', function (req, res) {
res.writeHead(
200,
{'Content-Type':'text/plain'}
);
res.end('Hello World');
});
server.listen(8000, '127.0.0.1');
oczekiwanie na zdarzenie request
kod obsługi zdarzenia wysyłający
odpowiednie nagłówki do klienta HTTP
oraz wysyłający odpowiednią
wiadomość
13. Node.JS - webserver “hello world”
var http = require('http');
var server = new http.Server();
server.on('request', function (req, res) {
res.writeHead(
200,
{'Content-Type':'text/plain'}
);
res.end('Hello World');
});
server.listen(8000, '127.0.0.1');
oczekiwanie na zdarzenie request
kod obsługi zdarzenia wysyłający
odpowiednie nagłówki do klienta HTTP
oraz wysyłający odpowiednią
wiadomość
C10K problem
10k połączeń na jednym rdzeniu
14. Node.JS - webserver “hello world”
var http = require('http');
var server = new http.Server();
server.on('request', function (req, res) {
res.writeHead(
200,
{'Content-Type':'text/plain'}
);
res.end('Hello World');
});
server.listen(8000, '127.0.0.1');
oczekiwanie na zdarzenie request
kod obsługi zdarzenia wysyłający
odpowiednie nagłówki do klienta HTTP
oraz wysyłający odpowiednią
wiadomość
C10K problem
10k połączeń na jednym rdzeniu
22. EVENT LOOP
➜ Zarządzanie streamami
➜ Ustawianie timerów jednorazowych i cyklicznych
➜ Ustawianie nextTicków i futureTicków
➜ Maksymalna czas zwłoki (timeout) może być zdefiniowany
➜ Jeżeli nie ma dalszych ticków, timerów lub streamów do obsłużenia -
event loop kończy pracę
23.
24.
25. Event Loop:
Istnieje kilka implementacji z docelowymi backendami:
● StreamSelectLoop - stream_select
● LibEventLoop - libevent pecl extension
● LibEvLoop - libev pecl extension (najszybszy)
● może kiedyś LibUV :)
26. Demultiplexer:
oczekuje na eventy dla zasobów np.
nowe połączenie i powiadamia
dispatcher, po czym przechodzi do
dalszego nasłuchiwania.
27. Dispatcher:
Komponent służący do rejestracji obsługi
zdarzeń. Odbiera synchronicznie event z
demultiplexera i wybiera właściwy event
handler, który następnie uruchamia.
28. Obsługa zdarzeń:
Event Handler który obsługuje
przekierowane do niego zdarzenie. Jest
to po prostu jeden ze zdefiniowanych
wcześniej callbacków.
29. Zasoby:
Czyli tutaj mamy wszystkie streamy które
chcemy obsługiwać. Mogą to być także
procesy czy np. uchwyty do plików.
34. EVENT LOOP
STREAM
TICKS
SOCKET
HTTP
TIMER
CHILD PROCESSFILESYSTEM
PROMISES
Ticki
umożliwiają wykonywanie określonych funkcji w ramach Event Loopa. Dzielą się na $loop-
>nextTick($callback) i $loop->futureTick($callback) .
Pierwszy jest wykonywany zawsze na początku każdej iteracji loopa, wykonywanie drugiego
jest zawsze oddelegowane jako ostatnia operacja w ramach iteracji.
Hint: zakolejkowane futureTicki nie będą wykonywane jeśli Event Loop nie ma więcej
zadań. NextTicki uzupełniają Event Loop nowymi zadaniami.
35. EVENT LOOP
STREAM
TICKS
SOCKET
HTTP
TIMER
CHILD PROCESSFILESYSTEM
PROMISES
Funkcja odmierzania czasu wykonywana w ramach Event Loop w kolejności zaraz po nextTicku.
● $loop->addTimer- jednorazowe wykonanie funkcji po upływie czasu (jak setTimeout)
● $loop->addPeriodicTimer- wykonuje funkcje cyklicznie (jak setInterval)
● $loop->cancelTimer - zatrzymje timer
● $loop->isTimerActive- sprawdza stan działania timera
Hint: nie polegaj na czasie odmierzanym przez timery w 100% ponieważ operacje przetwarzane w
Event Loop mogą zablokować je na jakiś czas wynikający z bieżących działań.
36. STREAM
SOCKET
HTTP
CHILD PROCESSFILESYSTEM
PROMISES
● Opakowuje natywny zasób stream.
● Rejestrowane w ramach Event Loop’a.
● Stream do odczytu i zapisu (ReadableStream / WriteableStream)
● Potkowość (ang. pipeline). WriteableStream może być ze sobą łączone, więc wyjście
jednego jest wejściem drugiego.
● Dane wczytywane / zapisywane do streamów są buforowane
Klasy Funkcjonalne:
CompositeStream- łączy streamy do odczytu i zapisu łącząc obydwie funkcjonalności
ThroughStream- umożliwia modyfikacje danch które stream zawiera - filtrowanie.
BufferedSink - konwertuje WriteableStreamdo Promise
STREAM
37. STREAM
SOCKET
HTTP
CHILD PROCESSFILESYSTEM
PROMISES
Dla funkcji asynchronicznych umożliwia natychmiastowy zwrot wartości, a raczej pewnej
zaliczki tej wartości.
Przykład - zamiana hosta na ip:
$factory = new ReactDnsResolverFactory();
$dns = $factory->create('8.8.8.8', $loop);
$dns->resolve('igor.io')->then(function ($ip) {
echo "Host: $ipn";
});
PROMISE
38. STREAM
SOCKET
HTTP
CHILD PROCESSFILESYSTEM
PROMISES
Komponent sieciowy umożliwiający tworzenie serwerów nasłuchujących nowych połączeń
oraz przetwarzających dane połączonych klientów.
$socket = new ReactSocketServer($loop);
$socket->on('connection', function ($conn) {
$conn->on('data', function ($data, $conn) {
$conn->write($data);
});
});
$socket->listen(1337);
SOCKET
40. Websockety - zalety
➜ Wsparcie we wszystkich wiodących
przeglądarkach (> IE8)
➜ Dwukierunkowość komunikacji
➜ Niezależnie wysyłanie wiadomości
➜ Protokół oparty na HTTP
➜ Niewielki rozmiar pojedynczego pakietu
danych
46. Autobahn.JS?
// dla wersji AUTOBAHNJS_VERSION="0.7.1"
var session = new ab.Session(
"ws://127.0.0.1:3000",
function () {
// zostaliśmy połączeni
},
function () {
// zostaliśmy rozłączeni
},
{
'skipSubprotocolCheck': true,
'maxRetries': 5,
'retryDelay': 2000
}
);
session.subscribe("http://phpers.pl/event/message", callback);
47. class WAMP implements RatchetWampWampServerInterface {
public function onPublish(ConnectionInterface $conn, $topic, $event, array
$exclude, array $eligible) {}
public function onCall(ConnectionInterface $conn, $id, $topic, array $params) {}
public function onSubscribe(ConnectionInterface $conn, $topic) {}
public function onUnSubscribe(ConnectionInterface $conn, $topic) {}
public function onOpen(ConnectionInterface $conn) {}
public function onClose(ConnectionInterface $conn) {}
public function onError(ConnectionInterface $conn, Exception $e) {}
}
$server = RatchetServerIoServer::factory(
new HttpServer(new WsServer(new WampServer(new WAMP()))),
3000
);
$server->run();
Ratchet + WAMP
48. $loop = ReactEventLoopFactory::create();
$pusher = new WAMP;
$context = new ReactZMQContext($loop);
$pull = $context->getSocket(ZMQ::SOCKET_PULL);
$pull->bind('tcp://127.0.0.1:5555');
$pull->on('message', array($pusher, 'onQueueAdded'));
$socket = new ReactSocketServer($loop);
$socket->listen(3000, '0.0.0.0');
$webServer = new IoServer(
new HttpServer(new WsServer(new WampServer($pusher))),
$socket
);
$loop->run();
ZeroMQ + Ratchet
49. ZeroMQ + Ratchet
$loop = ReactEventLoopFactory::create();
$pusher = new WAMP;
$context = new ReactZMQContext($loop);
$pull = $context->getSocket(ZMQ::SOCKET_PULL);
$pull->bind('tcp://127.0.0.1:5555');
$pull->on('message', array($pusher, 'onQueueAdded'));
$socket = new ReactSocketServer($loop);
$socket->listen(3000, '0.0.0.0');
$webServer = new IoServer(
new HttpServer(new WsServer(new WampServer($pusher))),
$socket
);
$loop->run();
$context = new ZMQContext();
$socket = $context->getSocket(
ZMQ::SOCKET_PUSH,
'websocket'
);
$socket->connect('tcp://127.0.0.1:5555');
$socket->send($payloadAsJSON);
50. ZeroMQ + Ratchet
$loop = ReactEventLoopFactory::create();
$pusher = new WAMP;
$context = new ReactZMQContext($loop);
$pull = $context->getSocket(ZMQ::SOCKET_PULL);
$pull->bind('tcp://127.0.0.1:5555');
$pull->on('message', array($pusher, 'onQueueAdded'));
$socket = new ReactSocketServer($loop);
$socket->listen(3000, '0.0.0.0');
$webServer = new IoServer(
new HttpServer(new WsServer(new WampServer($pusher))),
$socket
);
$loop->run();
$context = new ZMQContext();
$socket = $context->getSocket(
ZMQ::SOCKET_PUSH,
'websocket'
);
$socket->connect('tcp://127.0.0.1:5555');
$socket->send($payloadAsJSON);
public function onQueueAdded($payload) {
$payloadData = json_decode($payload, true);
// dalsze przetwarzanie
}