Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> PHP + ANDROID
Krystian950414
post 24.10.2017, 23:22:20
Post #1





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 13.12.2016

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


Witam. Nie wiem czy piszę w dobrym dziale ale chciałbym prosić was o pomoc.
Tworzę aplikację która wykorzystuje PHP oraz system Android. Aktualnie aplikacja na telefonie łączy się z serwerem i wykonuje skrypt PHP. Do aplikacji można się zalogować jako administrator lub użytkownik. Administrator ustawia aktywność alarmu i zapisuje w bazie danych(MySQL). Gdy na innym urządzeniu zaloguje się użytkownik jego aplikacja sprawdza w bazie czy alarm jest aktywny. Zrobiłem to na takiej zasadzie, że co sekundę aplikacja użytkownika wykonuje zapytanie do bazy sprawdzające aktywność alarmu. Działa to tak jakby w pętli bo cały czas musi nasłuchiwać bazy.
Problem polega na tym, że nie wiem czy takie rozwiązanie jest dobre. Co byłoby w sytuacji gdyby co sekundę zapytanie do bazy robiło 1000 osób? Czy serwer nie byłby za bardzo obciążony? Istnieją metody które wysyłają informacje do aplikacji android o zmianie w bazie danych? Aby działało to automatycznie, żeby urządzenia nie musiały co sekundę tworzyć zapytań. Z góry dziękuję za pomoc smile.gif
Go to the top of the page
+Quote Post
freemp3
post 25.10.2017, 08:34:26
Post #2





Grupa: Zarejestrowani
Postów: 467
Pomógł: 77
Dołączył: 6.09.2008
Skąd: Miechów / Kraków

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


Co sekundę to trochę za często. Wydaje mi się, że odpytanie serwera raz na minutę, czy dwie w zupełności wystarczy. Oprócz tego po stronie serwera możesz zrobić jakiś cache, który przy odpytywaniu przez użytkownika będzie pomijał bazę danych.


--------------------
Niemożliwym jest stworzenie czegokolwiek idiotoodpornego, ponieważ idioci są wyjątkowo pomysłowi.

https://www.aroch.pl
https://themeforest.net/user/aroch
https://www.astroblog.aroch.pl
https://www.4geeks.pl
Go to the top of the page
+Quote Post
Krystian950414
post 25.10.2017, 10:35:15
Post #3





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 13.12.2016

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


Problem polega na tym, że ma to być aplikacja do szkolenia pracowników. Jeżeli administrator ustawi alarm(czyli przerwę od szkoleń, np. na 30 minut) to musi to być szybka reakcja po stronie użytkownika szkolonego. Chciałbym zrobić tak aby zasada działania była podobna do jakiegoś chatboxa gdzie odpowiedź jest wyświetlana natychmiastowo smile.gif

Zrobiłem też taką wersję gdzie informacja o alarmie jest zapisywana w pliku tekstowym, więc użytkownicy pomijają bazę danych i czerpią informacje tylko z pliku tekstowego. Jednak jest to też połączenie co sekundę tyle, że do pliku tekstowego bez zapytań do bazy.

Ten post edytował Krystian950414 25.10.2017, 10:39:45
Go to the top of the page
+Quote Post
freemp3
post 25.10.2017, 11:07:41
Post #4





Grupa: Zarejestrowani
Postów: 467
Pomógł: 77
Dołączył: 6.09.2008
Skąd: Miechów / Kraków

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


W takim wypadku możesz ustawić sprawdzenie na około 5-10 sekund. Będzie to na tyle szybko, żeby użytkownicy dostali powiadomienie praktycznie od razu.

Idealnym rozwiązaniem, było by sprawdzanie pliku tekstowego bezpośrednio, czyli z pominięciem PHP, ale jeśli kod PHP jest dobrze zoptymalizowany to nie powinno być większych problemów z obciążeniem serwera.
Pytanie tylko czy to jest wasz serwer, czy jakiejś firmy hostingowej? Jeśli jakiejś firmy hostingowej to mogą wziąć taką ilość zapytać za atak i zablokować dostęp dla tych konkretnych adresów IP.


--------------------
Niemożliwym jest stworzenie czegokolwiek idiotoodpornego, ponieważ idioci są wyjątkowo pomysłowi.

https://www.aroch.pl
https://themeforest.net/user/aroch
https://www.astroblog.aroch.pl
https://www.4geeks.pl
Go to the top of the page
+Quote Post
batman
post 25.10.2017, 12:42:46
Post #5





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




Poczytaj o Firebase. Dzięki temu będziesz mógł zaimplementować komunikację w czasie rzeczywistym bez ciągłego odpytywania serwera.


--------------------
I would love to change the world, but they won't give me the source code.
My software never has bugs. It just develops random features.
Go to the top of the page
+Quote Post
Krystian950414
post 25.10.2017, 14:21:02
Post #6





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 13.12.2016

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


Dziękuję wam wszystkim za zainteresowanie tematem smile.gif
Klasa łącząca z serwerem w kodzie aplikacji działa na zasadzie otwierania stron internetowych. Czyli jest to obojętne czy otworzę plik PHP czy plik tekstowy. Dlatego tak jak pisze freemp3 właśnie w taki sposób zrobiłem tą drugą wersję. Co sekundę aplikacja otwiera bezpośrednio plik tekstowy i sprawdza co tam jest za wpis o alarmie. Praktycznie można powiedzieć, że informacje o alarmie odbywają się bez użycia bazy danych ponieważ administrator bezpośrednio modyfikuje plik tekstowy. Jednak dalej jest to łączenie z serwerem co sekundę i boję się, że większa ilość użytkowników przeciąży serwer. Mam nadzieję, że się mylę i jest to dobre rozwiązanie bo przecież proste jest sprawdzanie wpisu w pliku tekstowym smile.gif

Serwer będzie firmowy więc pewnie będzie on działał sprawniej smile.gif

Kolego batman czytałem już coś o Firebase i GCM, jednak opiera się ona bardziej na serwerach google i czy korzystanie z takich rozwiązań jest najlepszym wyjściem z tej stytuacji? smile.gif

Nie jestem zaawansowanym programistą, szukałem różnych informacji ale bezskutecznie. Może istnieje coś takiego jak notyfikacje przesyłane z serwera do aplikacji? Czy to wszystko odbywa się za pomocą serwerów google? smile.gif

Ten post edytował Krystian950414 25.10.2017, 14:26:55
Go to the top of the page
+Quote Post
batman
post 26.10.2017, 08:35:52
Post #7





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




Firebase jest własnością Google, więc tak, będziesz korzystać z serwerów Google. Nie jest to nic strasznego, zwłaszcza że korzystasz a Androida wink.gif Zamiast Google możesz użyć Amazon SNS.
Jeśli jednak z jakiegoś powodu nie chcesz korzystać z usług firm trzecich, możesz postawić własny serwer z Apache Kafka.


--------------------
I would love to change the world, but they won't give me the source code.
My software never has bugs. It just develops random features.
Go to the top of the page
+Quote Post
Krystian950414
post 26.10.2017, 14:27:16
Post #8





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 13.12.2016

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


Zagłębiłem się bardziej w tematyce przesyłania danych w czasie rzeczywistym i o ile się nie mylę, służą do tego sockety? Czyli Apache Kafka jest jednym z socketów, który sami możemy stworzyć?

A jak to wygląda z Node.js? Chciałbym stworzyć taki socket na serwerze, więc jaką usługę wybrać dla początkującego? Czy może jednak wybrać GCM? Dodam, że wszystkie informacje będą przechowywane w bazie, a w czasie rzeczywistym ma być przesyłana informacja tylko o alarmie smile.gif

Ten post edytował Krystian950414 26.10.2017, 18:29:49
Go to the top of the page
+Quote Post
batman
post 28.10.2017, 21:08:01
Post #9





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




Tak, do przesyłania danych w czasie rzeczywistym najczęściej używa się socketów. Praktycznie w każdym języku można je tworzyć, nawet w PHP, więc node.js nie jest tutaj potrzebny. W Twojej sytuacji najlepszym rozwiązaniem jest użycie czegoś gotowego jak Firebase lub gcm.


--------------------
I would love to change the world, but they won't give me the source code.
My software never has bugs. It just develops random features.
Go to the top of the page
+Quote Post
Krystian950414
post 30.10.2017, 15:00:05
Post #10





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 13.12.2016

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


Tworzyłem już Firebase jednak okazało się, że liczba podłączonych jednocześnie użytkowników wynosi 100. Na tą chwilę staram się zrobić serwer node. Pytanie moje brzmi czy jeżeli zrobię serwer node na dysku komputera to nie będzie problemu dołączaniem użytkowników z systemu android? Zazwyczaj tutoriale pokazują jak zrobić połączenie między użytkownikami android jednak serwer znajduje się również na telefonie, no chyba że się mylę smile.gif

Wydaje mi się, że problem rozwiązany. Tutoriali w internecie jest mnogo więc stworzyłem prosty serwer Node. Z tym nie było problemu gorzej z połączeniem pomiędzy serwerem i androidem. Jednak i to udało się zrobić, dzięki temu mogę przesyłać dane w czasie rzeczywistym. Działa to bez zarzutu, chociaż jestem ciekawy jak to wszystko będzie się sprawować gdy do serwera podłączy się kilkadziesiąt użytkowników biggrin.gif
Tak więc dzięki za pomoc, a w szczególności dziękuję użytkownikowi batman smile.gif
Go to the top of the page
+Quote Post
batman
post 31.10.2017, 10:37:59
Post #11





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




Jeśli będziesz miał problem z wydajnością przy dużej ilości użytkowników, sprawdź tornado. Framework ten został stworzony z myślą o obsłudze dużej ilości połączeń. Jest dosyć często porównywany z Node.js i w zależności od tego, kto przygotowuje zestawienie, wygrywa lub przegrywa. Tak naprawdę wszystko zależy od tego czy wolisz pisać w javascript czy pythonie.


--------------------
I would love to change the world, but they won't give me the source code.
My software never has bugs. It just develops random features.
Go to the top of the page
+Quote Post
Krystian950414
post 31.10.2017, 15:21:46
Post #12





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 13.12.2016

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


Dzięki batman, będę miał ten framework na uwadze. W zasadzie porównując Python i JavaScript to w tym pierwszym jakieś doświadczenie mam, więc jakoś ogarnę biggrin.gif Zobaczymy jak aplikacja przejdzie testy. Serwer będzie w firmie więc powinien być bardziej wydajny niż serwery hostingowe smile.gif
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: 29.03.2024 - 11:27