Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Ajax blokuje ładowanie strony
Boshi
post 16.12.2016, 18:58:59
Post #1





Grupa: Zarejestrowani
Postów: 342
Pomógł: 15
Dołączył: 30.08.2011

Ostrzeżenie: (0%)
-----


Dwa problemy;
1 Mam notyfikacje zrobione na ajax long polling. Powiedzmy, że działają. Kod
widok
http://pastebin.com/Nc8ynnkD
kontroler
http://pastebin.com/7mPZckUJ

Działa to na takiej zasadzie, że jak w pliku dane.txt zmieni się czas i warunek w pętli się nie spełni to ma zwrócić odpowiedź i wyświetlić powiadomienie.

problem1. Przy każdym przełączeniu podstrony, czas ładowania strony oscyluje w granicach 20-30s, problem jest żadanie ajax, bo jak zakomentuję kod czas spada do ~1s. Zauważyłem, że jeżeli w czasie ładowania strony zmienie sobie ręcznie w pliku czas to strona od razu się ładuje. Podejrzewam, że wtedy pętla nie spełnia warunku i skrypt zwraca odpowiedź i odblokowuje stronę.

problem 2. Jak rozpoznać w pliku który użytkownik zmienił czas? Moim pomysłem jest stworzenie dla każdego zarejestrowanego użytkownika osobny czas a potem w skrypcie rozdzielanie tego i aktualizowanie czasu tylko zalogowanemu użytkownikowi. Np

romek 12321312
franek 2131223432
janek 21321312

I jeżeli np janek wysyła prywatną wiadomość do franka to skrypt wyszukuje franka i jemu zmienia czas w pliku, a że został mu zmieniony czas to dostaje powiadomienie.

powinno to być zrobione wszystko jakoś na websocetach, ale zanim to uruchomię to miną święta 2017r...
Go to the top of the page
+Quote Post
2 Stron V   1 2 >  
Start new topic
Odpowiedzi (1 - 19)
maly_swd
post 17.12.2016, 17:39:36
Post #2





Grupa: Zarejestrowani
Postów: 744
Pomógł: 118
Dołączył: 14.02.2009
Skąd: poziome

Ostrzeżenie: (0%)
-----


A w AJAXsie masz włączone asynchroniczne przesyłanie danych?

async: true


--------------------
śmieszne obrazki
Kryzys: Ser jem spleśniały, wino piję stare i samochód mam bez dachu..
Go to the top of the page
+Quote Post
Boshi
post 17.12.2016, 23:41:30
Post #3





Grupa: Zarejestrowani
Postów: 342
Pomógł: 15
Dołączył: 30.08.2011

Ostrzeżenie: (0%)
-----


Tak.


Na prawdę liczę na pomoc biggrin.gif Jutro się do tego na poważnie zabieram i mam nadzieję to rozgryźć choćbym miał zęby zjeść.
Go to the top of the page
+Quote Post
com
post 18.12.2016, 21:51:40
Post #4





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

Ostrzeżenie: (0%)
-----


może byś sobie tak ten kod zdebugował, skoro to Symfony to masz konsole nawet. Tyle lat na forum i jeszcze się nie nauczył?
Go to the top of the page
+Quote Post
Boshi
post 18.12.2016, 22:29:40
Post #5





Grupa: Zarejestrowani
Postów: 342
Pomógł: 15
Dołączył: 30.08.2011

Ostrzeżenie: (0%)
-----


No, ale co debugować? wiem jaki czas wysyłam do serwera, wiem jaki zwraca, wiem gdzie tkwi błąd i nie wiem jak go rozwiązać. Poza tym nie wiem, czy serwer się nie udusi? np niech w odstępie 10 min wyśle 10 userów wyśle wiadomość prywatną. Każda wiadomość generuje kolejny request z nowym czasem, jak się serwer zachowa z taką pętlą?
Go to the top of the page
+Quote Post
com
post 18.12.2016, 22:42:54
Post #6





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

Ostrzeżenie: (0%)
-----


Weź opisz swój problem bardziej ludzko, bo nie bardzo wiem co Ty pragniesz osiągnąć, bo z tego kodu to za bardzo nic nie wynika wink.gif
Go to the top of the page
+Quote Post
nospor
post 18.12.2016, 22:47:42
Post #7





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Rety... com.... toz wszystko masz podane jak wol na tacy w czym problem

@Boshi problemem tutaj jest sesja, ktora blokuje wykonywanie innego kodu dopoki jeden sie nie wykona. Usun sesje dla testu a zobaczysz ze bedzie smigac jak ta lala smile.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Boshi
post 18.12.2016, 22:56:09
Post #8





Grupa: Zarejestrowani
Postów: 342
Pomógł: 15
Dołączył: 30.08.2011

Ostrzeżenie: (0%)
-----


Wypróbuję potem Nospor.
Swoją drogą mam wrażenie, że to nie jest dobra droga dla notyfikacji dla wielu użytkowników. Chciałem to zrobić na long polling i działa dobrze dla jednego usera, ale dla wielu...

Go to the top of the page
+Quote Post
com
post 18.12.2016, 23:05:01
Post #9





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

Ostrzeżenie: (0%)
-----


nospor Może jestem ślepy, ale gdzie Ty widzisz sesje? smile.gif

$_POST ?, przecież to powinieneś wyciągać z $request wink.gif

ta pętla się teraz nigdy nie kończy bo $lastDate zawsze zwraca zero wink.gif

Ten post edytował com 18.12.2016, 23:15:17
Go to the top of the page
+Quote Post
nospor
post 18.12.2016, 23:09:03
Post #10





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
nospor Może jestem ślepy, ale gdzie Ty widzisz sesje?
Poprostu czytam objawy... tongue.gif

Cytat
ta pętla się teraz nigdy nie kończy bo zawsze zwraca zero
com ty wez moze w niedziele nie czytaj postow na forum bo masz problem z podstawowa analiza kodu wink.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
com
post 18.12.2016, 23:13:30
Post #11





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

Ostrzeżenie: (0%)
-----


nospor niech Ci będzie tongue.gif

  1. $lastDate = isset($_POST['timestamp']) ? $_POST['timestamp'] : 0;


To zwraca zero tongue.gif
bo w Symfony do posta odwołujesz sie tak :
http://symfony.com/doc/2.0/book/http_funda...nses-in-symfony
tongue.gif
Go to the top of the page
+Quote Post
nospor
post 18.12.2016, 23:20:24
Post #12





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Ty mnie nie ucz podstaw response bo ja je znam.
NIe zmienia to jednak faktu, ze tablica $_POST, przynajmniej dla AJAX, nadal bedzie wypelniona, wiec jego kod dziala jak najbardziej ok tongue.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
com
post 18.12.2016, 23:26:08
Post #13





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

Ostrzeżenie: (0%)
-----


wiem że znasz, ok, to mój błąd wink.gif
Go to the top of the page
+Quote Post
nospor
post 18.12.2016, 23:28:29
Post #14





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Zeby nie bylo: ja sie z toba zgadzam, on to powinien pobierac z obiektu $request. No ale nie zmienia to faktu ze jego $_POST tez dziala wink.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Boshi
post 18.12.2016, 23:42:43
Post #15





Grupa: Zarejestrowani
Postów: 342
Pomógł: 15
Dołączył: 30.08.2011

Ostrzeżenie: (0%)
-----


Panowie, kłócicie się o pierdoły dotyczące kodu zamiast problemu tongue.gif Czy to request czy $_POST jest bez znaczenia totalnie.

Com. Zwraca 0 przy pierwszym requeście (a i tak powinien wysyłać od razu czas generowania strony, ale to szczegół), potem wysyła zwrócony czas z powrotem i porównuje dopóki warunek się nie spełni. To działa, zmieniam sobie recznie czas w pliku (symulacja rzeczywistej zmiany, np wysłanie wiadomości itd) i dostaje powiadomienie. Tyle, że blokuje totalnie działanie strony dopóki znów nie dostanę powiadomienia.

Nospor. Sesja tu nic do rzeczy nie ma. Testowane na zalogowanym i bez logowania użytkowniku. Po prostu.

wchodzisz na stronę. Na starcie wysyłane jest żadanie ajax do serwera, jako, że pętla spełnia warunek i się wykonuje, dead, strona zawiecha. Zmieniam czas pliku, jeb strona się od razu odblokowuje.


Tylko tak jak pisałem, dla wielu użytkowników ten pomysł ogólnie może być słaby i nie wiem czy w to brnąć, ale z drugiej strony stawianie redisa, czy node i websocetów to mega dużo roboty.
Go to the top of the page
+Quote Post
com
post 19.12.2016, 00:16:56
Post #16





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

Ostrzeżenie: (0%)
-----


https://github.com/panique/php-long-polling zainspiruj sie biggrin.gif


Ten post edytował com 19.12.2016, 00:37:35
Go to the top of the page
+Quote Post
Boshi
post 19.12.2016, 00:42:47
Post #17





Grupa: Zarejestrowani
Postów: 342
Pomógł: 15
Dołączył: 30.08.2011

Ostrzeżenie: (0%)
-----


no ale wtedy ten warunek nigdy się nie spełni i zwraca co chwilę odpowiedź, bo pierwszy raz masz false czaspliku<0 więc zwraca czas pliku do klienta, a w drugim requeście wysyłasz mu czas pliku, a że czaspliku jest równy czasowipliku to przez zmianę warunku pętla się nie spełni znowu i od razu odpowiedź itd ;p

A co do linku to podobna implementacja jest u mnie biggrin.gif
com. Jakieś inne rozwiązanie dla wielu użytkowników, bo nawet jak rozwiąże ten problem to pozostaje kwestia jak rozpoznawać osobno komunikaty dla każdego zalogowanego użytkownika..

Ten post edytował Boshi 19.12.2016, 00:46:22
Go to the top of the page
+Quote Post
com
post 19.12.2016, 00:58:12
Post #18





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

Ostrzeżenie: (0%)
-----


tak wiem, dlatego edytowałem wink.gif owszem podobna ale twoja blokuje przeglądarkę, a tamta nie smile.gif
no najlepiej zrobić push z serwera np wykorzystać:
https://www.pubnub.com/tutorial/php-push-api/
lub
https://pusher.com/tutorials/realtime-notifications

lub(nie działą w ie/edge ale jest https://github.com/Yaffle/EventSource)
http://www.howopensource.com/2014/12/intro...er-sent-events/
https://github.com/shahzadthathal/server-se...nts-php-example
https://github.com/licson0729/libSSE-php

Ten post edytował com 19.12.2016, 01:03:46
Go to the top of the page
+Quote Post
nospor
post 19.12.2016, 08:17:44
Post #19





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Nospor. Sesja tu nic do rzeczy nie ma. Testowane na zalogowanym i bez logowania użytkowniku. Po prostu.

Powiedzialem sesja a nie zalogowany user. Nawet jak nie masz zalogowanego usera to ci symfony startuje sesje. Staraj sie czytac ze zrozumieniem tongue.gif

Cytat
owszem podobna ale twoja blokuje przeglądarkę, a tamta nie
Tamta nie blokuje poniewaz tamta nie uzywa sesji wink.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Boshi
post 26.12.2016, 22:55:17
Post #20





Grupa: Zarejestrowani
Postów: 342
Pomógł: 15
Dołączył: 30.08.2011

Ostrzeżenie: (0%)
-----


Postaram się coś ogarnąć z tego, jak znajdę chwilę czasu, potestuję i dam znać.


Dobra, punkt dla nospora biggrin.gif Jak, żeś Ty na to wpadł? Wyłączyłem sesje przez firewalla

  1. public:
  2. # since anonymous is allowed users will not be forced to login
  3. pattern: ^/.*
  4. security: false


faktycznie działa, nie blokuje strony, ale tak czy siak, muszę mieć załączaną sesję, bo inaczej nie wykonam logowania i ogólnie nic chodzić nie będzie.

Rozwiązanie które podał @com również blokuje żądanie o dziwo.

kto by pomyślał, że stworzenie notyfikacji na stronę internetową jest takie skomplikowane...

@com, nie interesują mnie rozwiązania komercyjne/abonamentowe bo to jest pod inżynierkę. Rozwiązanie może być dowolne, aby działało. Chciałem pominac tylko zwykłego ajaxa odpytującego co sekunde bazę bo to zakrawa o absurd.
A te SSE jakoś tak słabo z dokumentacją.

Ten post edytował Boshi 26.12.2016, 23:03:17
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 05:49