pristup k nette z websocket servera

- manro
 - Člen | 8
 
Zdravím, potreboval by som poradiť s prepojením websocket servera [php / ďalej len ws], resp. jeho aplikácie a nette. Ws beží samozrejme samostatne, ale umiestnený môže byť ľubovoľne, s tým že obsahuje SplClassLoader a existuje v namespace WebSocket, ktorý obsahuje aj obslužnú triedu aplikácie.
Ide mi hlavne o prístup ku databáze po tom čo klient zavrie okno… ws spracuje signál, že daný klient sa odpojil + chcel by som previesť nejaké update v databáze…

- manro
 - Člen | 8
 
Snažím sa proste implementovať websocket server, samozrejme s tím, aby aplikácia bežiaca na ws komunikovala s nette. Ako server zvolím napríklad túto https://github.com/…hp-websocket implementáciu pre php, Kde sa vytvorí samostatná obsluha pre signály napr:
<?php
namespace WebSocket\Application;
class TestApp extends Application
{
    private $_clients = array();
    private $_filename = '';
    public function onConnect($client)
    {
	$id = $client->getClientId();
        $this->_clients[$id] = $client;
	//klient pripojeny
    }
    public function onDisconnect($client)
    {
        $id = $client->getClientId();
	unset($this->_clients[$id]);
	//klient odpojeny
    }
    public function onData($data, $client)
    {
        $this->_actionEcho($data);
	// nejake data
    }
    private function _actionEcho($text)
    {
	$encodedData = $this->_encodeData('echo', $text);
	foreach($this->_clients as $sendto)
	{
		$sendto->send($encodedData);
        }
    }
}
a v samostatnom skripte sa spustí server
<?php
require(__DIR__ . '/lib/SplClassLoader.php');
$classLoader = new SplClassLoader('WebSocket', __DIR__ . '/lib');
$classLoader->register();
$server = new \WebSocket\Server('127.0.0.1', 8000, false);
// server settings:
$server->setMaxClients(100);
$server->setCheckOrigin(false);
$server->setAllowedOrigin('foo.lh');
$server->setMaxConnectionsPerIp(100);
$server->setMaxRequestsPerMinute(2000);
$server->registerApplication('demo', \WebSocket\Application\TestApp::getInstance());
$server->run();
server s klientom bez problémov funguje: klient odošle dáta ws, ten signál spracuje a odošle dáta klientovi resp. klientom, ktorí následne môžu odoslať iný signál na spracovanie nette… avšak ak klient zavrie browser, ws spracuje signál o odpojení ale ďalej neviem čo :)… napríklad realtime monitorovanie stavu užívateľa → online nie je problém, cez nette uložím do db príznak, ak však zavriem okno, zavriem aj nette…

- Filip Procházka
 - Moderator | 4668
 
Já to pořád nechápu :) Nette je na klientu, nebo na serveru? Proč používáš application, když z tama skoro nic nevyužiješ, nebo ano?

- manro
 - Člen | 8
 
Mám klasickú nette stránku, ktorá cez js komunikuje s ws serverom
[ktorý je fyzicky pri nette]. Ws server, resp. TestApp ktorá na ňom beží
spracuje príslušný signál [onConnect, onDisconnect, onData, apod.] a odpovie
naspäť klientovy, resp. klientom…
Ale ja chcem popri tom v TestApp pracovať aj s databázou, utils apod.
z nette…
Edit: posielať z TestApp na nette normalne http requesty?
Editoval manro (17. 4. 2012 21:02)