patry6123
4.02.2015, 19:32:24
Witam,
jestem w trakcie pisania aplikacji i chciałbym się Was zapytać, o to jak najlepiej zrobić takie coś.
Mam pseudo giełdę polegającą na składaniu zleceń sprzedaży i zleceń kupna. Składam zlecenie kupna do tabeli zlecenia_kupna, o polach id_zk, id_zs, id_skladajacego, cena. W momencie gdy złoży ktoś zlecenie kupna, chcę aby albo dodało się zlecenie, jeśli go nie będzie, albo uaktualniło się to co jest obecnie, ale to jestem sam wstanie zrobić. Gorzej jest z aktualizacją strony bez przeładowania. Myślę, alby zrobić takie coś, że zapisuję w json-ie informację o obecnym stanie po otwarciu strony a następnie co jakiś czas (1 sekunda), wysyłać zapytanie czy nastąpiła jakaś zmiana. i ew. zmieniać to na stronie i w json-ie Teraz tylko pytanie jak to zrobić by nie zabić serwera, oraz czy może ktoś mi napisać funkcję odświeżającą?
Z góry dziękuję.
Jeśli ktoś ma jakiś lepszy pomysł to bardzo proszę.
NickOver
4.02.2015, 22:23:40
Słowo klucz:
Ajax!
Nawet pogoglam za Ciebie:
http://api.jquery.com/jquery.ajax/Przed wysłaniem pobierasz informacje z pól formularza, wysyłasz request i odbierasz informacje.
Chyba że o co innego chodzi.
patry6123
5.02.2015, 18:08:20
To, że nie padło słowo AJAX w mojej wypowiedzi, nie znaczy, że nie wiem co to jest. Tak naprawdę opisałem wszystko by nie było zbędnych pytań co gdzie jak. Chodzi mi jedynie o to by nie zabić serwera requestami co sekundę, ale zrobić aktualizację po zamianie. Czy jest jakaś prosta technologia, która będzie mi to aktualizować?
Pomoże ktoś?
aniolekx
6.02.2015, 08:11:43
jeżeli nie chcesz używać przycisku "Zapisz", to zrobił bym to z użyciem
focus i
keypress , to znaczy klient klika na pole i coś pisze i jeżeli od ostatniego naciśnięcia klawisza minęło więcej np niż 2 sec to wysyłam request do bazy.
Oczywiście warto by było gdzieś wyświetlić informacje ze zmiany są zapisywane, żeby użytkownik był tego świadomy.
patry6123
6.02.2015, 11:07:31
Też o tym myślałem, ale bardziej chodzi o to, że w bazie zostaną dokonane zmiany, które będę chciał wyświetlić w przeglądarce, bez odświeżania.
aniolekx
6.02.2015, 11:35:22
sorry to może nie zrozumiałem o co pytasz, czy masz na myśli "two way data binding"? Taki efekt jak np w Meteorze lub AngularJS?
ShaggyAG
6.02.2015, 11:42:15
w tabeli dodaj pole z datą i czasem ostatniej modyfikacji które będziesz updatował z każdym razem przy jakichś zmianie updacie i ładujesz ten czas do cache.
Jak ładujesz stronę to zapisujesz gdzieś w js tan czas ostatniej modyfikacji. I wysyłasz go ajaxem co jakiś czas do serwera.
Jak data przesłana ajaxem starsza niż ta w cache robisz select jak nie, nie robisz nic.
Choć Ajax co 1s to chyba średnio dobry pomysł.
ale to teria, robiłem raz coś podobnego ale bez cache.
patry6123
6.02.2015, 11:44:03
Ogólnie tak, ale nie chciał bym wchodzić w kolejne framework-i.
//Edit @up też o tym myślałem, i chyba tak zrobię, ale tylko po wejściu przez usera w pole.
b4rt3kk
6.02.2015, 12:24:51
Jeśli bierzesz pod uwagę dużą liczbę klientów to ja bym proponował zrobić to na sockecie, tzn. serwer, który wykonuje zapytania w razie zmiany stanów, cachuje to sobie i zwraca podłączonym klientom. Lepiej wykonać 1 zapytanie i zwrócić je 1000 klientów, niż 1000 zapytań od 1000 klientów.
Coś jak chat, tyle że informacją wspólną dla wszystkich jest właśnie stan towarów na giełdzie.
W miarę możliwości zamiast łączenia wielu tabel (względnie korzystania z widoków) lepiej sobie machnąć tabelę, która trzyma wszystkie newralgiczne dane w jednym miejscu, tak by można je było szybko pobrać i zwrócić.
patry6123
6.02.2015, 16:08:00
A możesz mi coś podesłać, jakiś artykuł, albo coś bo nawet nie wiem jak zadać pytanie do googla...
b4rt3kk
6.02.2015, 16:51:24
Cytat(patry6123 @ 6.02.2015, 16:08:00 )

A możesz mi coś podesłać, jakiś artykuł, albo coś bo nawet nie wiem jak zadać pytanie do googla...
Tutaj masz całkiem przyjemny tutorial:
http://www.binarytides.com/php-socket-programming-tutorial/Wystarczający żeby zapoznać się z tematem.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.