9. Proč WebSockety v PHP a ne v něčem
vhodnějším, třeba node.js?$
$
Pokud máte už běžící aplikaci, tak
napsáním WS funkcionality v PHP budete
těžit z jednotné codebase, využití znalostí
týmu a stejných procesů na testování,
continuous integration, build a deployment.$
$
Pokud stavíte na zelené louce a chcete se
naučit něco nového, tak vás do PHP nutit
nebudu :)
16. use
RatchetHttpHttpServer;
use
RatchetServerIoServer;
use
RatchetWebSocketWsServer;
use
ReactEventLoopFactory;
use
ReactSocketServer;
$
$loop
=
Factory::create();
$server
=
new
Server($loop);
$server-‐>listen(8080,
'0.0.0.0');
$
new
IoServer(
new
HttpServer(new
WsServer($app)),
$server
);
$
$loop-‐>run(); Spuštěný proces spravujte např. pomocí
supervisord.org, aby stále běžel.
17. use
RatchetConnectionInterface
as
Client;
$
class
App
implements
RatchetMessageComponentInterface
{
$
public
function
onOpen(Client
$client)
{
$
}
$
public
function
onMessage(Client
$client,
$message)
{
$
}
$
public
function
onClose(Client
$client)
{
}
$
public
function
onError(Client
$client,
Exception
$e)
{
$
}
$
}
18. public
function
onMessage(Client
$client,
$message)
{
foreach
($this-‐>clients
as
$c)
{
if
($c
!==
$client)
{
$c-‐>send($message);
}
}
}
Rozeslání zprávy
na ostatní klienty
19. Při navázání spojení
pošlete klientovi
počáteční stav
Např. posledních 10 zpráv v chatu. Pokud
byste počáteční stav nepotřebovali, tak vlastně
nepotřebujete ani žádné úložiště na data.
20. Časovače
$loop-‐>addTimer(5,
function()
{
//
za
pět
sekund
});
$
$loop-‐>addPeriodicTimer(5,
function()
{
//
každých
pět
sekund
});
Na odpojení uživatele při neaktivitě, na zasílání
pingu pro udržení připojení. Časovače jsou jen
v paměti, po pádu a obnovení procesu
je musíte zrekonstruovat.
22. use
RatchetServerFlashPolicy;
use
RatchetServerIoServer;
use
ReactSocketServer;
$
$server
=
new
Server($loop);
$server-‐>listen(843,
'0.0.0.0');
$policy
=
new
FlashPolicy();
$policy-‐>addAllowedAccess('*',
8080);
$
new
IoServer($policy,
$server);
$loop-‐>run();
FlashPolicy
23. Long polling
AJAX fallback, který funguje všude$
POST požadavky pro odchozí zprávy$
Stream příchozích zpráv přes dlouhodobý
GET požadavek$
xhr.responseText &
xhr.onreadystatechange
25. Ratchet neumí SSL (wss://)$
Webserver může fungovat jako proxy,
která zabezpečenou komunikaci zajistí$
Webserver může WebSockety poskytnout
na klasických portech (80 a 443) –
např. na subdoméně$
Apache – mod_proxy_wstunnel