Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Kolejka - rozważania.
seaquest
post 30.01.2004, 11:56:06
Post #1





Grupa: Przyjaciele php.pl
Postów: 790
Pomógł: 7
Dołączył: 6.02.2003
Skąd: Polska

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


Zbudowałem mechanizm kolejki ale mam kilka pytań.

Co do dodawania zadań:
Zapisuje zadania w tablicy. Moje pytanie: Czy bardziej opłaca się dodawać zadania na początku tablicy i potem usuwać wykonane zadania funkcją array_shift :? Czy też może lepiej dodawać zadania na końcu tablicy i wykonywać zadania czytając tablicę od końca :?:

Kolejkę wykorzystuję wtedy, gdy jakiś moduł wymaga, aby użytkownik był zalogowany. Wtedy dodaję do kolejki zadanie, a następnie odsyłam na stronę logowania. Po zalogowaniu user zostaje automatycznie przeniesiony na właściwą stronę.

Ale moje drugie pytanie brzmi: Czy można wykorzystać kolejkę jeszcze do innych modułów, zadań :?:

I trzecie: Co, jeśli w kolejce są zadania, a użytkownik przegląda inne strony :?: (bo np. zrezygnował z oglądania strony zastrzeżonej dla użytkowników) Co zrobić z takimi zadaniami :?: Skasować je, przedstawić użytkownikowi, przymusowo go tam odesłać :wink: :?:

Czwarte: Gdzie przechowywać kolejkę :?: Bo ja wymyśliłem, że przechowuję ją w tablicy, a następnie zapisuję reprezentację zmiennej (funkcja serialize i unserialize) w bazie danych. Czy to jest optymalne rozwiązanie :?: Czy raczej powinienem zastosować inny zapis danych z kolejki :?:

Na koniec. Nie jestem przekonany do tego, żeby temat leżał na php Pro, ale może się tu nadaje. Przeczytałem chyba wszystko co było na temat kolejki na forum, ale nadal mam pewne wątpliwości. Wybaczcie, że tak dużo czytania :wink:
Go to the top of the page
+Quote Post
radziel
post 30.01.2004, 12:31:12
Post #2





Grupa: Zarejestrowani
Postów: 103
Pomógł: 0
Dołączył: 25.04.2003
Skąd: Olsztyn

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


Dorzuce tutaj link do dość ciekawej klasy, do obsługi stosów / kolejek - http://phpclasses.byting.at/browse.html/pa...ckage/1277.html (by Seth snitch.gif)

Swoją drogą, mam ten sam problem winksmiley.jpg


--------------------
r.
Go to the top of the page
+Quote Post
scanner
post 30.01.2004, 12:43:48
Post #3





Grupa: Zarząd
Postów: 3 503
Pomógł: 28
Dołączył: 17.10.2002
Skąd: Wrocław




Czy bardzeij opłaca się dawać zadania na początku?
Są dwa tyty kolejki:
1. First In First Out (stos)
2. First In Last Out
(przynajmniej o takich mnie w szkołach uczyli)
Musisz się zdecydować na jeden z nich. Ja lubię FILO.

Każdy moduł/zadanie może mieć kolejkę podzadań - i tak w kółko, aż do elementarnej operacji.
Kolejkę możesz użyć np. do zapisu templatesów, które należy wyświetlić, lub do ustalenia kolejności wyświetlania jakiś formularzy.

Jeśli użytkownik wyjdzie ze strefy strzeżonej, wciąż masz jego status jako "logged". Więc może wrócić.
Kolejkę przechowujesz w sesji, np.:
[php:1:3ce031af9c]<?php
$_SESSION['Queue'] = array ('task_name', 'task_params')
?>[/php:1:3ce031af9c]


--------------------
scanner.info
Warto pamiętać: KISS, DRY
Go to the top of the page
+Quote Post
seaquest
post 30.01.2004, 18:50:54
Post #4





Grupa: Przyjaciele php.pl
Postów: 790
Pomógł: 7
Dołączył: 6.02.2003
Skąd: Polska

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


ja znam jeszcze LIFO(ale to to samo co FILO) i osobiście taki model zastosowałem.

FIFO moim zdaniem nie ma sensu bo:

- user wchodzi na module (zastrzezony dla zarejestrowanych) -> do kolejki dodaje sie (module)
- user jest na stronie logowania, ale musi sie zarejestrowac -> do kolejki dodaje sie login

user sie rejestruje, a FIFO mu zwraca module, a dopiero potem login (znowu - marnowanie czasu i procesora)

FILO == LIFO tak wiec nie ma roznicy

I teraz nie jestem pewien co do skryptu Seth'a. Widze, że w tytule jest FIFO, ale tak jak pokazalem, to chyba nikt by nie chcial.
Go to the top of the page
+Quote Post
lolo
post 31.01.2004, 15:42:30
Post #5





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 30.03.2003
Skąd: Kraków

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


@scanner: pomyliles troche oba pojecia.

Otoz stos to struktura danych ze strategia LIFO (albo FILO). Logiczne, przeciez odkladamy elementy na gore stosu i mozemy zawsze wziasc z niego tylko ten, ktory jest na gorze, czyli ten, ktory dolaczylismy jako OSTATNI.

Natomiast kolejka ma strategie FIFO.

W razie watpliwosci odsylam do Cormena, rozdzial 11.

Pozdrawiam


--------------------
"Tylko dwie rzeczy sa nieskonczone: wszechswiat i glupota ludzka. Choc co do pierwszego nie mam pewnosci." [Albert Einstein, wybitny fizyk]
Go to the top of the page
+Quote Post
hawk
post 31.01.2004, 23:13:59
Post #6





Grupa: Zarejestrowani
Postów: 521
Pomógł: 0
Dołączył: 3.11.2003
Skąd: 3city

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


lolo:
Kolejka może mieć strategię (dyscyplinę obsługi) FIFO/FCFS, LIFO/LCFS i różne inne, im więcej skrótów tym lepiej :wink: .
W razie wątpliwości odsyłam na Politechnikę Gdańską.
Mam nadzieję że nie przeszkodziłem w dyskusji laugh.gif .
Go to the top of the page
+Quote Post
lolo
post 1.02.2004, 00:50:00
Post #7





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 30.03.2003
Skąd: Kraków

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


Masz racje, zapomnialem. Przeciez po to sie mowi kolejka FIFO itd. smile.gif Ale chodzilo glownie o to ze FIFO to nie stos.


--------------------
"Tylko dwie rzeczy sa nieskonczone: wszechswiat i glupota ludzka. Choc co do pierwszego nie mam pewnosci." [Albert Einstein, wybitny fizyk]
Go to the top of the page
+Quote Post
seaquest
post 1.02.2004, 10:02:49
Post #8





Grupa: Przyjaciele php.pl
Postów: 790
Pomógł: 7
Dołączył: 6.02.2003
Skąd: Polska

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


No dobrze panowie, ale postarajmy się jednak odpowiedzieć na pytania.

I jeszcze jedno, czy zastosowanie kolejki typu FIFO ma wogule sens.
A co do przykładów użycia, to prosiłbym jakieś konkrety.
Go to the top of the page
+Quote Post
lolo
post 1.02.2004, 13:10:38
Post #9





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 30.03.2003
Skąd: Kraków

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


Ja tez duzo sie tutaj naczytalem o kolejkach FIFO i myslalaem nad tym, zeby je jakos zastosowac, ale od razu doszedlem do wniosku, ze to, co mi jest potrzebne to stos. Wiec jezeli nie widzisz jak na razie zastosowan FIFO (tak jak ja smile.gif), to nie ma sensu sie nad tym glowic.
Jak kiedys sie z czyms takim spotkasz, gdzie to bedzie ci potrzebne to sobie przypomnisz o FIFO.

A teraz jeszcze moje pytanie, jak cos rozwiazales.

Otoz jezeli mamy jakiegos niezalogowanego uzytkownika, ktory sobie klika na jakis dzial, ktory jest tylko dla zalogowanych. To odkladamy na stoswyswietlenie tego dzialu, potem odkladamy sprawdzenie czy user moze tam wejsc. Okazuje sie ze nie moze, wiec odkladamy an stos wyswietlenie logowania. Logowanie sie wyswietla, user sie loguje poprawnie, i wtedy ze stosu bierzemy ostatnia akcje, czyli ten dzial, na ktory kliknal najpierw.
Teraz problem, bo musimy w miedzyczasie stos gdzies przechowac? Czy sledzicie tez niezalogowanych uzytkonwikow, nadajac im SIDy? No bo dla mnie to jest jedyne rozwiazanie, ze tworze dla nich sesje i tam to odkladam (albo w bazie, nie ma znaczenie, sesje i tak potrzebna), bo inaczej to mi sie goscie pomieszaja. Jak to rozwiazujecie?

Dzieki za odp.


--------------------
"Tylko dwie rzeczy sa nieskonczone: wszechswiat i glupota ludzka. Choc co do pierwszego nie mam pewnosci." [Albert Einstein, wybitny fizyk]
Go to the top of the page
+Quote Post
seaquest
post 1.02.2004, 15:39:32
Post #10





Grupa: Przyjaciele php.pl
Postów: 790
Pomógł: 7
Dołączył: 6.02.2003
Skąd: Polska

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


No ja każdemu użytkownikowi zakładam sesję niezależnie od tego czy jest zarejestrowany, czy nie. Następnie do sesji przypisuję zmienne. Sesję przechowuję w bazie i uzyskuję do niej dostęp za pomocą odpowiedniej klasy.
Go to the top of the page
+Quote Post
Seth
post 2.02.2004, 12:57:46
Post #11





Grupa: Przyjaciele php.pl
Postów: 2 335
Pomógł: 6
Dołączył: 7.03.2002

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


Cytat
Otoz jezeli mamy jakiegos niezalogowanego uzytkownika, ktory sobie klika na jakis dzial, ktory jest tylko dla zalogowanych. To odkladamy na stoswyswietlenie tego dzialu, potem odkladamy sprawdzenie czy user moze tam wejsc. Okazuje sie ze nie moze, wiec odkladamy an stos wyswietlenie logowania. Logowanie sie wyswietla, user sie loguje poprawnie, i wtedy ze stosu bierzemy ostatnia akcje, czyli ten dzial, na ktory kliknal najpierw.
Teraz problem, bo musimy w miedzyczasie stos gdzies przechowac? Czy sledzicie tez niezalogowanych uzytkonwikow, nadajac im SIDy? No bo dla mnie to jest jedyne rozwiazanie, ze tworze dla nich sesje i tam to odkladam (albo w bazie, nie ma znaczenie, sesje i tak potrzebna), bo inaczej to mi sie goscie pomieszaja. Jak to rozwiazujecie?

Heh mielismy ten sam problem z DeyVem i powiem tak: jest to jedno wielkie blocko z ktorego wyjscie nie jest warte wysilku.
Najlepiej kolejki stosowac do wypelnianych formularzy (na Pro jest o tym temat) w pozostalych zastsowoaniach jest duzo pracy przy takiej kolejce, a i tak moga sie pojawic bledy i pewne trudnosci.
Go to the top of the page
+Quote Post
lolo
post 2.02.2004, 17:11:28
Post #12





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 30.03.2003
Skąd: Kraków

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


Hmm... no nie brzmi to optymistycznie. Ale wlasnie tak cholera juz myslalaem, jak rozwazalem sledzenie gosci, co troche glupio mi wygladalo.
Czyli jezeli radzisz, zeby robic takie rzeczy, jak napsialem na gorze np. podajac parametry typu 'redirect' abo cos takiego?
A mozesz pzyblizyc mi na jakie problemy natrafiles albo wskazac na jakis post, w ktorym to dyskutowaliscie? Bo dalej kolejka/stos jest dla mnie bardzo dobrym rozwiazaniem tego problemu.
Ech, Tim Berners-Lee mogl o tym pomyslec.... laugh.gif


--------------------
"Tylko dwie rzeczy sa nieskonczone: wszechswiat i glupota ludzka. Choc co do pierwszego nie mam pewnosci." [Albert Einstein, wybitny fizyk]
Go to the top of the page
+Quote Post
seaquest
post 2.02.2004, 20:02:11
Post #13





Grupa: Przyjaciele php.pl
Postów: 790
Pomógł: 7
Dołączył: 6.02.2003
Skąd: Polska

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


Seth, no ale jak wykorzystujesz kolejkę FIFO, do której napisałeś skrypt. Bardzo mnie to ciekawi...
Go to the top of the page
+Quote Post
Seth
post 2.02.2004, 21:54:13
Post #14





Grupa: Przyjaciele php.pl
Postów: 2 335
Pomógł: 6
Dołączył: 7.03.2002

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


@lolo: Redirect bylby dobrym rozwiazaniem.

Najwieksze problemy jakie byly to takie, ze uzytkownik moze wyskoczyc z przewidzianej kolejki w dowolnym czasie tzn: nie bedzie sie np chcial zalogowac.
Nastepna kwestja to "oszukiwanie" usera. Nasza kolejka dzialala w ten spsob, ze nie bylo redirecta gdy trzeba bylo wyswietlic logowanie - w kolejce umieszczane bylo, ze uztytkownik po zalogowaniu przejdzie do strony, ktora moze zobaczyc po zalogowaniu - tylko odrazu zamiast danej strony byla wyswietlana formatka logowania.
Poza tm unas do kolejki byly wkladane jeszcze moduly i ich wyniki co z kollei jeszce bardziej komplikowalo cala kolejke.

Ale hmmm jak tak sobie teraz mysle to gdyby zrobic taka kolejke lecz bez wrzucania tam jak unas modulow, a tylko same nazwy kolejnych stron, ktore sa potrzebne do wyswietlenia wlasciwej to nie bylo by to az takie straszne jak wczesniej pisalem smile.gif

@seaquest:
Tutaj jest troche o wykorzystaniu kolejek:
http://php.pl/viewtopic.php?t=5722
http://php.pl/viewtopic.php?t=965
Go to the top of the page
+Quote Post
lolo
post 3.02.2004, 12:48:54
Post #15





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 30.03.2003
Skąd: Kraków

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


Tez tak sadze. Doszedlem do wniosku, ze najlepiej to samemu sie do tego przekonac, ze to nie jest dobre rozwiazanie, bo a noz jednak mi bedzie odpowiadalo... tongue.gif


--------------------
"Tylko dwie rzeczy sa nieskonczone: wszechswiat i glupota ludzka. Choc co do pierwszego nie mam pewnosci." [Albert Einstein, wybitny fizyk]
Go to the top of the page
+Quote Post
squid
post 7.02.2004, 08:57:05
Post #16





Grupa: Zarejestrowani
Postów: 358
Pomógł: 0
Dołączył: 3.07.2003
Skąd: Szczecin->niebuszewo->*(next to window)

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


Cytat
1. First In First Out (stos)
2. First In Last Out

chcialbym zauwazyc ze tu jest na odwrot (dawno do szkoly chyba chodziles;)) Stost to jest First In Last Out (jak stos ksiazek pierwsza odlozona jest ostatnia zdjeta;)), natomiast tpowa kolejka jest First in First Out.

co do innego zastosowania kolejek to kiedys sobie wymyslilem zeby zrobic awaryjny zbior danch ktory automatycznie przejmowal by ciezar zapisu i odczytu danych od bazy danych w wypadku jej awarii. Oczywiscie awaryjny zbior danych oparty bylby na plikach tekstowych a z nimi sa problemy odnosnie wielodostepowosci zapisuno i wpadlem na pomysl zeby odladac na stos lub kolejke wiecej niz jedno zadanie zapisu do pliku, oczywiscie user ni odczowa tutaj nic poniewaz pozostali zapisuja dane do plikow tymczasowych ktore to wlasnie mam w kolejce. Nie wiem czy jasno sie wyrazam ale chodzi tu o system kolejkowania dostepu do plikow.

___
[scanner] Złączono 2 posty.


--------------------
Jeśli życie to kara to nieźle nabroiłem ;-)
Go to the top of the page
+Quote Post
Bora
post 1.03.2004, 23:37:03
Post #17





Grupa: Zarejestrowani
Postów: 270
Pomógł: 0
Dołączył: 15.06.2003

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


Czy jest sens budowania wielkich stosów do logowani??
Ja uważam że nie bo i tak korzystamy tylko z ostatnich elementów, czyli
Kod
wejscie na zabronioną strone -#(dodanie strony na stos)#-> login -#(jeśli sie zalogował)#-> ostatnia strona z stosu.

Zawsze przekierowywujemy tylko na ostatnią strone gdyż to własnie ona skłoniła do zalogowania się. Czy w związku z tym nie lepiej zastosowac nadpisywanie sie danych i ograniczyć sie n do 3 elementów?questionmark.gif.
Dziwi mnie wiekość stosu zastosowanego przez Seth'a , klasa jest ja zwylke pięknie napisana ale czy aż taki nadmiar danych jest potrzebny??
Go to the top of the page
+Quote Post

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: 25.07.2025 - 05:05