dev-master
9999999-devLibrary for Ratchet IO server with Nette
GPL-3.0 BSD-3-Clause GPL-2.0
The Requires
- php >= 5.3.9
- nette/nette 2.*
- cboden/ratchet 0.3.*
by Vít Ledvinka
Wallogit.com
2017 © Pedro Peláez
Library for Ratchet IO server with Nette
Implementace websocketového serveru Ratchet http://socketo.me, do Nette., (*1)
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., (*2)
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., (*3)
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., (*4)
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:, (*5)
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");
});
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., (*6)
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' });
});
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., (*7)
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., (*8)
Router musí obsahovat pouze jednu metodu match, která přijímá zprávu ve formátu string a vrací Request objekt., (*9)
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., (*10)
Library for Ratchet IO server with Nette
GPL-3.0 BSD-3-Clause GPL-2.0