Portál AbcLinuxu, 7. května 2025 12:25
// kontrola poslednich hovoru na ustrednu var callCheck = setInterval(function(){ // zjistujeme prubezne stav $.getJSON( "/zakaznici/?do=kontrolaHovoru", function(data) { if (data) { // pokud je to nas zakaznik, otevreme kartu if (data.zakaznik) { if (Notification.permission === "granted") { notify = new Notification("Příchozí hovor!", { tag: "prichoziHovorZakaznik", body: "Volá zákazník " + (data.zakaznik.typ === "firma" ? data.zakaznik.nazev : data.zakaznik.jmeno + " " + data.zakaznik.prijmeni) + ", klapka: " + data.klapka, icon: "/images/hotline.jpg" }); notify.onclick = function () { window.open("/zakaznici/detail-zakaznika/default/" + data.zakaznik.id + "/sipcall"); }; } else { // pokud nejsou notifikace povoleny, tak zastavime kontrolu clearInterval(callCheck); } } } }); }, 5113);Já bych chtěl tuto neefektivní metodu pravidelného dotazování requesty nějak zoptimalizovat, třeba za využití nějakého "hooku", kdy by tyto notifikace byly aktivně zasílány serverem do prohlížeče. Takže nějaký "push". Lze toho dosáhnout za využití kombinace PHP a JS? Nebo musím sáhnout po externích nástrojích jako je třeba právě webhook? Děkuji za nakopnutí správným směrem.
Řešení dotazu:
Lze toho dosáhnout za využití kombinace PHP a JS?Já bych to z pohledu klienta udělal tak, že klient pošle HTTP požadavek, a tento požadavek čeká a buď vrátí informace v okamžiku, kdy je potřeba je zobrazit, nebo vrátí nějakou prázdnou odpověď nejpozději po 20 sekundách (aby se spojení nerozpadlo) a pak klient zadá další požadavek. Udělat serverovou část v PHP bez pollingu mi přijde komplikované, protože PHP je pro každý požadavek tak nějak samostatný kontext a je složité posílat mezi nimi notifikace. Nemohl bys to psát třeba v bottle.py? Tam snad fungují fronty které se dají sdílet mezi požadavky.
Já to mám tedy trošku jinak, klient pošle požadavek a buďto se vrátí informace o hovoru (hovor nesmí být starší 15 vteřin) a uloží tuto informaci do SESSION (aby nedošlo k oznámení totožného hovoru třeba 2x, pokud bude mít někdo otevřen totožný web vícekrát), nebo se nevrátí nic. A za 8 vteřin opět stejné kolečko.Já to chápu, ale tvůj přístup znamená, že když posíláš požadavek každých 8 sekund, tak můžeš mít až 8 sekund staré informace. Můj přístup ti změny pošle ihned.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.