frosty22 / ratchet
Library for Ratchet IO server with Nette
Requires
- php: >= 5.3.9
- cboden/ratchet: 0.3.*
- nette/nette: 2.*
This package is not auto-updated.
Last update: 2020-01-05 17:16:04 UTC
README
Implementace websocketového serveru Ratchet http://socketo.me, do Nette.
Vlastnosti
- Implementuje potřebné komponenty Ratchet a většinu zašťituje v duchu Nete
- Zpřístupňuje služby kontajneru, a povoluje nastavení serveru pomocí konfiguračního souboru
- Sjednoduje služby, parametry - kontajner - mezi Nette aplikací a Ratchet servrem
- Komunikace zapouzdřená v duchu Presenteru, ale obsahuje vlastní Application - viz níže Application, Control
- Mapování client > server zpráv pomocí routování - viz níže Router
- Zprávy server > client je možné obsluhovat pomocí několika druhé response - viz níže Responses
Instalace rozšíření
- Stažení přes composer: frosty22/ratchet
- Připojení DI rozšíření Ale\Ratchet\DI\RatchetExtension
Pokud nevíte jakým způsobem připojit rošíření, dopoučuji použít rošíření https://github.com/vojtech-dobes/nette-extensions-list, které umožňuje následně v konfiguračním souboru definovat sekci "extensions", kde pak lze jednoduše přidat toto rošíření. Alternativně je nutné v boostrapu v události onCompile na Configuration zavěsit callback, který bude přidávat všechna Vaše rožšíření pomocí volání metody addExtension na Compiler.
Responses
Zprávy ze serveru ke klientovi je možné zasílat několika způsoby - ve Vašich Controllerech, se nachází několik metod send()*. Ty slouží jako zkratky k zasílání Response, k daným klientům. Je možné napsat si vlastní response implementací interface IResponse a rozšířením JS handleru těchto zpráv.
Response se liší minoritně jakým způsobem jsou na straně klienta v knihovně jquery.ratchet.js odchytávány a následně zprocesovány.
MessageResponse
Toto je základní response, kterou je možné zaslat - je to čístá plaintext response a na straně klienta si ji musíte obsloužit sami, pokud používáte přiložený jquery.ratchet.js, příklad zde:
class TestControl extends \Ale\Ratchet\UI\Control { public function handleSimple() { $this->send(new \Ale\Ratchet\Response\MessageResponse('pouze plain text')); } }
// Vytvoření spojení var ws = $.websocket("ws://127.0.0.1:8080/", { message : function(data, event) { // Přidání callbacku na všechny zprávy alert(data); // V příkladu vyhodí hlášku "pouze plain text" } }); // Callback po vytvoření spojení se socket servrem ws.bind("open", function(){ // Odešleme zprávu na náš TestControl a handleSimple (bez parametrů) ws.send("Test:simple"); });
CallResponse
Již komplexnější reponse, které se předává název callbacku, který se má u klienta zavolat na oblužném handler JS objektu, dále se data přenáší ve formátu JSON a sami se převádí na straně PHP a JS.
class TestControl extends \Ale\Ratchet\UI\Control { public function handleDefault($abc) { // $abc - bude obsahovat "test123" dle příkladu JS níže $this->send(new \Ale\Ratchet\Response\CallResponse('foo', array('bar' => 'baz'))); } }
// Objekt obsahující naše oblužné callbacky (určeno pro CallResponse) var sampleObject = new Object(); // Definujeme callback na property 'foo' // bude zavolán dle příkladu výše v handleDefault, a vyhodí hlášku "baz" sampleObject.foo = function(data) { alert(data.bar); }; // Vytvoření spojení var ws = $.websocket("ws://127.0.0.1:8080/", { handler : sampleObject // Předáme handler našemu klientovi }); // Callback po vytvoření spojení se socket servrem ws.bind("open", function(){ // Odešleme zprávu na náš TestControl a handleDefault ws.send("Test:default", { 'abc' : 'test123' }); });
Application
Router & Request
Slouží k převední přijaté zprávy na konkrétní Request, což je objekt, který obsahuje informace o tom, který controller, jeho metoda a s jakými parametry se má zavolat.
Router je objekt, který z přijaté zprávy z klienta vytvoří tento Request a předá ho Application, který obslouží tento proces - vytvoří příslušný controler, zavolá dané metody a předá parametry z Requestu.
Router musí obsahovat pouze jednu metodu match, která přijímá zprávu ve formátu string a vrací Request objekt.
SimpleRouter
Výchozí router je SimpleRouter, který přijímá zprávy ve formátu JSON, a to s dvěma klíči path a data, kde path obsahuje cestu ke controlleru ve formátu jako je vytváření odkazů v nette presenterech tj. Module:Controller:handle, s tím že module je volitelný, a zároveň defaultní handle či controller je ve výchozím stavu pojmenován default.