Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Skrypt java pokazujący status wykonania pętli PHP

27 Apr 2019 11:20 507 9
  • #1
    User removed account
    Level 1  
  • #3
    JacekCz
    Level 39  
    Nie ma skryptów java, jest język (kompilowany) Java i jest JavaScript do skryptów
  • #4
    ble___
    Level 16  
    Pewnie by się dało zrobić inny plik php który będzie uzyskiwał stan postępu ( z tym mogą być problemy ).
    Wtedy można by napisać w js skrypt który co jakiś czas (lub na zasadzie HTTP long polling'u) wywołuje ten drugi php i wyświetla postęp.

    Trudność w napisaniu drugiego skryptu polega na przekazaniu informacji z pierwszego php do drugiego php.
    To by się chyba dało zrobić np. za pomocą jakiegoś IPC (inter-process communication) np. https://php.net/manual/en/book.sem.php msg_send
    (ale to często niezainstalowane albo z innego powodu niesprawne). Moża by do komunikacji użyć plików ale to z wielu powodów niezalecane.

    Trzeba by też jakoś identyfikować dany postęp (jak 2 klientów jednocześnie się połączy to będą 2 postępy jednocześnie).

    Albo może cały skrypt wywołać jak long polling tak żeby wysyłał na bieżąco postęp (nie jestem pewny czy możliwe do obsłużenia w js).

    Albo wpisać w wyszukiwarkę "php progress library" i spróbować któregoś z dostępnych gotwców np. http://w3shaman.com/article/php-ajax-progress-bar.
  • #5
    User removed account
    Level 1  
  • #6
    Dżyszla
    Level 42  
    Albo taki plik byś musiał udostępniać przez Apacha, albo przez inny plik PHP. Z poziomu JavaScript(!) asynchronicznie po prostu wysyłasz zapytanie (hasło: AJAX). Ale po pierwsze - co, jeśli równocześnie więcej niż jeden klient wywoła - trzeba uwzględnić. A druga rzecz to równoczesny dostęp do zapisu i odczytu - potrafi to szwankować. Po trzecie: jeśli przebieg pętli będzie krótki, postęp będzie mało wiarygodny (dla mnie to w ogóle nie można tego nazwać pokazywaniem statusu wykonania pętli). Jeśli zaś długi, to trzeba mieć na uwadze limity czasu wykonania, a dodatkowe zapisywanie do pliku, który na dodatek będzie współdzielony jeszcze dodatkowo wydłuży.

    Generalnie protokół HTTP średnio nadaje się do monitorowania wykonania programu po stronie serwera w czasie rzeczywistym.
  • #7
    User removed account
    Level 1  
  • #8
    Arkasian
    Level 10  
    W zależności od tego czy Twoja struktura to SSR czy CSR update progress baru możesz wykonać na różne sposoby.
    Mogą to być przeładowania strony wymuszane co sekundę przez klienta,(słabe, ale proste bo fullSSR)
    Mogą to być elementy dynamiczne na stronie klienta: Vanilla JS i jedziesz AJAXem.
    W przypadki AJAX musisz pomyśleć o async/await wtedy też inaczej wykonasz endpoint API aby był kompatybilny; inną opcją jest wykonanie long pollingu na endpoincie, ale to będzie duży load na serwerze przy wielu klientach.
    Ogólnie to to co chcesz zrobić już na samym podłożu źle ująłeś, konceptualnie tj. nie sprawdzas postępu pętli; sprawdzasz postęp pracy wykonaną przez skrypt na backend web appki zatem nazwij to tak. Stwórz sobie, wymodeluj coś takiego jak AbstractJob, dziedzicz od tego i stwórz ConcretAJob a w tym konkretną robotę i to dopiero wywołuj z poziomu publicznego API - czy to by był SSR czy CSR(tj. Web API czy RESTful).

    Dodano po 58 [minuty]:

    Dżyszla wrote:


    Generalnie protokół HTTP średnio nadaje się do monitorowania wykonania programu po stronie serwera w czasie rzeczywistym.


    No, a tu błąd. Bo to zależy od zastosowania: streamowanie takie jak on chce wykonać, a nawet większych usług chodzi po HTTP i ma się jakkolwiek dobrze (streaming video na przykład); nie jest to oczywiście najlepsze są lepsze, ale z jakiegoś powodu inny mocny protokół do komunikacji i streamowania gRPC jest zbudowany nad HTTP, więc nad tą uwagą to zastanowiłbym się. Zresztą zwracanie uwagi na to, że HTTP się nie nadaje(przy tym nie rozważenie tak na prawdę wszystkich przypadów użycia) bez podania alternatywy rzekomo jakkolwiek lepszej, jest całkowicie bez sensu.
  • #9
    JacekCz
    Level 39  
    Arkasian wrote:
    W zależności od tego czy Twoja struktura to SSR czy CSR update progress baru możesz wykonać na różne sposoby.
    ...


    Kolega pyta o PHP i jest początkujący.
    async await też tam nie ma
    Trochę się rozpędziłeś
  • #10
    Arkasian
    Level 10  
    JacekCz wrote:
    Arkasian wrote:
    W zależności od tego czy Twoja struktura to SSR czy CSR update progress baru możesz wykonać na różne sposoby.
    ...


    Kolega pyta o PHP i jest początkujący.
    async await też tam nie ma
    Trochę się rozpędziłeś


    Podałem wszystkie możliwe opcje, które przyszły mi oczywiście na myśli. Zauważ, że zacząłem od tej najprostszej, przecież ewentualnie nikt nie broni mu wpisać w Google tego lub zapytać mnie o to tutaj, o więcej szczegółów; wykorzystanie lepszej opcji tutaj daje mu ewentualną korzyść z zapewnienia cokolwiek większej skalowalności i reprodukowalności kodu czy też nawet samego rozwiązania.