Skocz do zawartości

[Zamknięty]Pojedyncza instancja dla wielu funkcji


FixKinG
 Udostępnij

Rekomendowane odpowiedzi

  • Global Administrator
2 godziny temu, xman8830 napisał:

Do tego jest większa możliwość że bota może wywalać z serwera

 

5 godzin temu, xman8830 napisał:

Nic właściwie po za większym zużyciem ramu ale ja miałem jakieś 60 funkcji na vps z nazwy i dawało rade 😉 

Co za bzdury piszesz.. Jesli bot jest napisany w dobry sposob, poprawnym a nawet zalecanym jest by korzystal z jednego socketu.  Co do ramu to tez jest bzdura bo sama instancja php cli pobiera juz sam jakis ram dla samej egzystencji nie uruchamiajac interpretera zyskujemy mniejsze uzycie ramu..

  • Lubię to! 1
Odnośnik do komentarza
Udostępnij na innych stronach

37 minut temu, elipef napisał:

 

Co za bzdury piszesz.. Jesli bot jest napisany w dobry sposob, poprawnym a nawet zalecanym jest by korzystal z jednego socketu.  Co do ramu to tez jest bzdura bo sama instancja php cli pobiera juz sam jakis ram dla samej egzystencji nie uruchamiajac interpretera zyskujemy mniejsze uzycie ramu..

Ja tak tylko z obserwacji, pewnie masz rację xd

Odnośnik do komentarza
Udostępnij na innych stronach

  • Global Administrator

Zgadzam się z wami co do pojedynczej instancji, ale zwróćmy uwagę na pewne kwestie, które niestety blokują delikatnie szybkość działania takiego bota (chodzi tu o jednowątkowość)

  1. Obowiązuje wówczas kolejka wykonywanych funkcji: Jeśli funkcja nr 1 będzie się wykonywać od np. 10 sekundy i będzie analizowała dość dużą liczbę danych (czas działania np. 2-3 sek) to kolejna funkcja będzie mogła się dopiero odpalić po tym czasie. Wówczas taki bot nie będzie prawidłowo działał z interwałem, a wręcz będzie wykonywał funkcje dosłownie jedna po drugiej czasami w losowej kolejności
  2. Błąd krytyczny w jednej z funkcji spowoduje automatyczne zamknięcie całego procesu, co skutkuje zamknięciem całego bota
  3. Bot nie jest wówczas w stanie w tym samym czasie słuchać np. komend z czatu, ponieważ jest zajęty wykonywaniem innych funkcji zamiast nasłuchiwania socketu

Oczywiście rozwiązaniem tych wszystkich problemów jest wielowątkowość, ale w przypadku bota napisanego w PHP jest to dość trudne do osiągnięcia, a sam język PHP nie został stworzony do działania w wielowątkowości (nie jest to język wykorzystywany do takich celów pomijając proste aplikacje np. boty pod ts'a)

 

Jeśli ktoś jest bardziej zainteresowany tematem to polecam poczytać sobie o innych językach programowania, które umożliwiają pracę na socketach oraz wielowątkowość. Biorąc pod uwagę ostatnie aktualizacje serwerów TeamSpeak polecam również w takiej sytuacji wykorzystać protokół SSH, który został jakiś czas temu wprowadzony. 

 

Polecam zapoznanie się z biblioteką NPM: https://www.npmjs.com/package/ts3-nodejs-library

NodeJS umożliwia dość łatwe pisanie wielowątkowe oraz szybciej obsługuje sockety. Oczywiście warto również używać "try"/"catch" w celu zapobiegnięciu błędów krytycznych, które mogą spowodować zamknięcie instancji oraz zaopatrzyć się w dodatkową bibliotekę NPM "nodemon", która umożliwia łatwe uruchamianie procesu w tle, interfejs do przeglądania logów oraz automatyczne restartowanie procesu w przypadku błędu krytycznego

 

PS. PHP jest językiem jednowątkowym, tak więc uruchomienie jednej instancji spowoduje obciążenie jednego rdzenia procesora. Jeśli VPS posiada więcej niż jeden wątek/rdzeń to zalecam większą ilość instancji.

  • Lubię to! 1
Odnośnik do komentarza
Udostępnij na innych stronach

  • Global Administrator
9 godzin temu, Dave napisał:

Zgadzam się z wami co do pojedynczej instancji, ale zwróćmy uwagę na pewne kwestie, które niestety blokują delikatnie szybkość działania takiego bota (chodzi tu o jednowątkowość)

  1. Obowiązuje wówczas kolejka wykonywanych funkcji: Jeśli funkcja nr 1 będzie się wykonywać od np. 10 sekundy i będzie analizowała dość dużą liczbę danych (czas działania np. 2-3 sek) to kolejna funkcja będzie mogła się dopiero odpalić po tym czasie. Wówczas taki bot nie będzie prawidłowo działał z interwałem, a wręcz będzie wykonywał funkcje dosłownie jedna po drugiej czasami w losowej kolejności
  2. Błąd krytyczny w jednej z funkcji spowoduje automatyczne zamknięcie całego procesu, co skutkuje zamknięciem całego bota
  3. Bot nie jest wówczas w stanie w tym samym czasie słuchać np. komend z czatu, ponieważ jest zajęty wykonywaniem innych funkcji zamiast nasłuchiwania socketu

Oczywiście rozwiązaniem tych wszystkich problemów jest wielowątkowość, ale w przypadku bota napisanego w PHP jest to dość trudne do osiągnięcia, a sam język PHP nie został stworzony do działania w wielowątkowości (nie jest to język wykorzystywany do takich celów pomijając proste aplikacje np. boty pod ts'a)

 

Jeśli ktoś jest bardziej zainteresowany tematem to polecam poczytać sobie o innych językach programowania, które umożliwiają pracę na socketach oraz wielowątkowość. Biorąc pod uwagę ostatnie aktualizacje serwerów TeamSpeak polecam również w takiej sytuacji wykorzystać protokół SSH, który został jakiś czas temu wprowadzony. 

 

Polecam zapoznanie się z biblioteką NPM: https://www.npmjs.com/package/ts3-nodejs-library

NodeJS umożliwia dość łatwe pisanie wielowątkowe oraz szybciej obsługuje sockety. Oczywiście warto również używać "try"/"catch" w celu zapobiegnięciu błędów krytycznych, które mogą spowodować zamknięcie instancji oraz zaopatrzyć się w dodatkową bibliotekę NPM "nodemon", która umożliwia łatwe uruchamianie procesu w tle, interfejs do przeglądania logów oraz automatyczne restartowanie procesu w przypadku błędu krytycznego

 

PS. PHP jest językiem jednowątkowym, tak więc uruchomienie jednej instancji spowoduje obciążenie jednego rdzenia procesora. Jeśli VPS posiada więcej niż jeden wątek/rdzeń to zalecam większą ilość instancji.

 

Kolejna porcja bzdur. Nie istnieje aktualnie zadny jezyk(tymbardziej bot), ktory by byl wielowatkowy od samego istnienia. To w roli programisty lezy to by aplikacja potrafila korzystac z kilku watkow(choc czy w przypadku ts jest to konieczne?). PHP umie w wielkowatkowosc: http://www.php.net/manual/en/intro.pthreads.php. To o czym piszesz nie ma znamion wielowatkowosci, predzej liczy sie w tej sytuacji asynchronicznosc wykonywanych operacji. 

1. Operacje asynchroniczne nie moga byc kolejkowane. Mozna jednynie nadac im interval, ktory i tak nie okresla dokladnie co ile czasu cos sie wykona(kolejkowanie czegos co wykonuje sie bez kolejki ?XD?) Samo uzywanie intervalu, kolejek to jest proteza wstawiana w normalnie funkcjonujaca operacje. 

2. Istnieja mechanizmy w kazdym nowoczesnym jezyku programowania do lapania bledow. A sam fakt wystapienia jakiegos bledu krytycznego w aplikacji to niedopatrzenie programisty. Dobra aplikacja jest w stanie zareagowac na bledy.

3. Jest w stanie bez problemu robic takie rzeczy przez np eventy. 

 

NodeJS nie wspiera tak latwo wielowatkowosci co np PHP, pisanie aplikacji wielowatkowych, asynchronicznych w Node nie nalezy do najlatwiejszych rzeczy(setInterval to nie jest wielowatkowosc..). 

 

Odnośnik do komentarza
Udostępnij na innych stronach

  • 6 miesięcy temu...
Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
 Udostępnij

  • Ostatnio przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników przeglądających tę stronę.

×
×
  • Dodaj nową pozycję...

🍪 Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę.