PHP(nette) aplikace a xmpp server
- jh
- Člen | 22
Zdravím,
chci si udělat jednoduchý webový chat, kdy uživatel prostě přijde na
stránku, zvolí si přezdívku a může real-time postovat příspěvky a
zároveň se mu budou taky nové příspěvky objevovat. Nechci to dělat jen
pomocí ajaxu a php, ale backendovat ten chat xmpp serverem, protože ty mají
moduly pro http bosh pomocí http pooling, takže odpadá nějaké periodické
dotazování na nové události, ale prostě se provede ajax požadavek a čeká
se na event. Když bych tedy poslal správně formátovanou xml zprávu tomu
xmpp serveru, tak by se např. všem ostatním připojeným tato zpráva
odeslala, ale vlastně se nikam ani neuloží do db, prostě nic. Jak se to tedy
dělá, to musím mít jeden ajaxový požadavek vedený na ten xmpp server a
pak druhým posílat např. ty zprávy na server, tam je uložit do db a nějak
z php odeslat tu zprávu tomu xmpp serveru a ten pak informuje ty klienty skrze
ten druhý ajaxový request? Teoreticky když si to tak představuju, tak by to
asi fungovat mělo, ale nemám s tím vůbec žádné zkušenosti, tak se chci
radši někde zeptat.
- Patrik Votoček
- Člen | 2221
Možná / Nejspíš budu trochu OT ale… Jelikož jsem si s XMPP už několikrát hrál tak snad to nebude zase tak velké OT…
- Musel by sis v té aplikaci zařídit registraci uživatelů na ten XMPP server (JID a heslo).
- Na XMPP server můžeš poslat zprávu pomocí XML tady je to OK.
- Musíš pro daného uživatele udržovat spojení s XMPP.
- Komunikace
- Server ti buďto pošle zprávu toho tvého spojení (pro daného uživatele). Ty už si ho pak do prohlížeče můžeš poslat jak chceš. Nejspíš tady budeš potřebovat nějakou „cache“ (asi nějakou DB).
- Při připojovaní se do konverzace (MUCu) je jedním z atributů v XML čas / počet zpráv které chceš od serveru získat (historie).
Celkově mě pro takové účely PHP připada zcela nevhodné. Navíc je to poněkud na rámec tohoto fóra.
Nicméně myšlenka že to na backendu půjde přes XMPP server je dobrá. Akorát ten článek mezi prohlížečem a tímto XMPP serverem bych nenechával na PHP. Ale použil třeba Node.js. Díky využití WebSockets to bude navíc doopravdy realtime :-).
Pokud by jsi zvolil Node.js tak to bude celkem hračka. Budeš muset pouze pořešit registraci uživatelů. Na zbytek můžeš využít skvělého Hubota od chlapů z GitHubu.
- jh
- Člen | 22
Já doufal, že mně spíš někdo potvrdí, co jsem si myslel :). Určitě
se podívám na Node.js. O WebSockets moc nepřemýšlím, protože bych
radši, aby to fungovalo i v těch starších prohlížečích. Jinak
strophe.js je implementace xmpp protokolu v javascriptu, takže je možné se
pomocí ní např. připojit na xmpp server, odeslat zprávu, přijímat zprávy
atd. a funguje to tak, že se provede ajaxový požadavek a čeká se na různé
eventy, na které pak strophe reaguje vyvoláním určitých handlerů, které
se zaregistrují před navázáním spojení. Myslel jsem, že by teda stačilo
jakoby navázat pomocí strophe.js spojení s xmpp serverem a tohle spojení by
se v prohlížeči používalo jen pro zprávy pushnuté xmpp serverem a když
bych já chtěl např. poslat někomu zprávu, tak bych to poslal normálně php
aplikaci, tam to uložil do db a pomocí nějaké php xmpp knihovny to teprve
pak poslal tomu xmpp serveru a ten by zařídil to pushnutí té zprávy
ostatním klientům.
Třeba knihovna jaxl, co jsem vygooglil, by tohle měla asi řešit.
Editoval jh (20. 12. 2011 14:54)
- Patrik Votoček
- Člen | 2221
v tom případě vůbec PHP nepotřebuješ (max na nějakou tu obsluhu účtů – registrace, zapomenutá hesla etc…). A pak je to zcela mimo rozsah tohoto fóra.