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)