![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 55 Pomógł: 1 Dołączył: 11.06.2011 Ostrzeżenie: (0%) ![]() ![]() |
Witam jak ugryźć taki temat:
Mamy serwis www który ma służyć do wizualizacji informacji przesyłanych ze zdalnych urządzeń GPRS. Z pomocą przychodzi nam PHP Sockets dzięki któremu mogę otworzyć port i nasłuchiwać informacji z urządzenia GPRS, problem w tym że skrypt czy też "mini serwer" PHP musi być uruchomiony poza apache w "czystym" PHP z wiersza poleceń bo inaczej nie działa - tzn. mi nie udało się go uruchomić i nie znalazłem też żadnego przykładu z takim rozwiązaniem. No a jeśli niema innego rozwiązania i skrypt wykonywany pod apache nie może otwierać i nasłuchiwać portów to jak rozwiązać problem komunikacji naszego serwisu stojącego na apache z "mini serwerem PHP" odbierającym dane po GPRS ? oczywiście z odebraniem danych nie ma dramatu bo skrypt mógł by je wrzucać do bazy danych a nasza strona by z niej czytała ale przy próbie wysłania czego do urządzenia GPRS jest już problem.... przynajmniej tak mi się wydaje.... ![]() 1. czy nasz serwis www na apache może samodzielnie otwierać i nasłuchiwać porty - jeśli tak to jak to zrobić? 2. jeśli nie może i musi to robić niezależny skrypt to jak taki serwis poskładać do kupy, jak się komunikować z tym skryptem przesyłać dane między serwisem a skryptem itd.... mam nadzieje że mocno nie zamieszałem pozdrawiam |
|
|
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
Ok, to własny serwer, czy jakiś wynajęty/shared? Jeśli to drugie, to na 90% firewall ISP-a.
Nie podałeś, na jakim porcie ma to nasłuchiwać, więc trochę to brodzenie w bajorze. -------------------- ![]() ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW! |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 677 Pomógł: 89 Dołączył: 31.08.2003 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Poprzedni wątek autora...
1. czy nasz serwis www na apache może samodzielnie otwierać i nasłuchiwać porty - jeśli tak to jak to zrobić? 2. jeśli nie może i musi to robić niezależny skrypt to jak taki serwis poskładać do kupy, jak się komunikować z tym skryptem przesyłać dane między serwisem a skryptem itd.... 1. Może, ale nie porty używane przez Apache (lub cokolwiek innego) - jak otworzyć port i nasłuchiwać, to już raczej wiesz - patrz swój poprzednio utworzony wątek. Z tym wyjątkiem, że Apache na porcie innym niż HTTP (80) nie będzie raczej potrzebny. 2. Jeśli skrypt miałby działać osobno, to opcji jest co najmniej kilka. Można zrobić daemona (co akurat ja robię najczęściej), może też działać pojedynczej sesji użytkownika w prostej pętli, etc. Komunikować można się na dowolny sposób, ale chyba najprościej poprzez bazę danych. Dodam, że w firmie robimy kilka serwerów (opartych o PHP) do komunikacji z urządzeniami takimi jak centralki alarmowe GPRS/LAN czy lokalizatory GPS i jak na razie nie było z tym żadnych problemów. Problemów z tym, że całość pisana jest w PHP ![]() Ten post edytował mls 25.06.2011, 15:43:00 -------------------- |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 55 Pomógł: 1 Dołączył: 11.06.2011 Ostrzeżenie: (0%) ![]() ![]() |
Oczywiście serwer własny więc mogę go konfigurować do woli
mam pytanie dotyczące tworzenia i otwieraniem portów w samej aplikacji bez pomocy zewnętrznego skryptu mam taki przykład który działa z linii komend a nie działa wywołany przez apache:
dlaczego? oczywiście port 8010 jest wolny ![]() |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 677 Pomógł: 89 Dołączył: 31.08.2003 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Socketów nasłuchujących nie ma po co przypisywać do hosta. Zamiast $host (w socket_bind) podstaw 0 (zero).
Skąd ta pewność, że nie działa pod Apache? Tylko stąd, że nic się nie wyświetla? Po każdym echo dodaj flush(); ![]() Ten post edytował mls 25.06.2011, 19:00:54 -------------------- |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 55 Pomógł: 1 Dołączył: 11.06.2011 Ostrzeżenie: (0%) ![]() ![]() |
No i jednak działa mogę tworzyć i nasłuchiwać porty z poziomu aplikacji uruchomionej na apache
![]() Tylko uświadomiłem sobie że niesie to za sobą mnóstwo problemów i kombinacji :/ podstawowa sprawa - raporty z urządzeń muszą spływać do DB cały czas nie tylko na czas trwania sesji użytkownika więc wariant z mini serwerem PHP jest o wiele sensowniejszy. Jak już pisałem wcześniej w tym wypadku do rozwiązania pozostanie problem komunikacji między serwerem PHP a aplikacją a więc: 1. odczyt danych - skrypt PHP wrzuca dane do DB a aplikacja sobie odczytuje tylko że będzie to całkowicie asynchroniczne, co w sytuacji gdy skrypt będzie zapisywał dane w DB a w tym samym momencie z poziomu aplikacji użytkownik będzie coś usuwał, wyszukiwał itd... silnik DB (InnoDB) zadba o to żeby nie było bałaganu czy trzeba się zając tym samemu ? 2. interakcja z urządzeniami GPRS z poziomu aplikacji? tutaj mam większy problem - na razie pomysł mam taki: do każdego połączenia serwerPHP <=> Urządzenie GPRS zestawiam drugie połączenie Aplikacja <=> serwerPHP i gadam z serwerem poprzez port TCP - ma to sens?? trzecia sprawa która mnie trapi to niekończące się pętle po stronie serweraPHP - a więc każdy otwarty socket to niekończąca się pętla która czeka na dane spływające z GPRS czy przy np. 100 urządzeniach nie będzie to duży kłopot? do tego tyle samo iteracji czekających na polecenia z aplikacji (to przy zastosowaniu sposobu j.w), do tego jakaś pętla musi latać po tabeli urządzeń i sprawdzać flagę aktywności aby zamykać i otwierać porty w razie włączenia wyłączenia urządzenia - czy są znane jakieś dobre praktyki przy tego typu zagadnieniach? |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 1 332 Pomógł: 294 Dołączył: 12.10.2008 Skąd: Olkusz Ostrzeżenie: (0%) ![]() ![]() |
stream_select / socket_select
Guru - Multiplexing - doczytaj o czytaniu i zapisie do socketów w trybie nie blokowanym - w tym przykładzie bodajże tylko akceptowanie połączeń jest w trybie nie blokowanym pozostałe są w trybie blokowanym - skoro chcesz to zrobić asynchronicznie to musisz wszystko ustawiać w tryb nie blokowany - nie chce mi się teraz szukać przykładów stream_set_blocking jeśli to masz na unix'ie skorzystaj z uniksowych socketów ;] Ten post edytował zegarek84 26.06.2011, 13:58:00 -------------------- Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.
|
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 55 Pomógł: 1 Dołączył: 11.06.2011 Ostrzeżenie: (0%) ![]() ![]() |
Jestem po lekturze zganień związanych z stream_select, socket_select itd...nie wiem czy wszystko dobrze rozumie - a być może że w ogóle tego nie rozumie
![]() Jak miał by działać taki mini server - sprawa podstawowa czyli funkcję stream i socket_select działają jako przełącznik na naszym sockecie, modyfikują tablice read, write w razie pojawienia się nowego połączenia ? i zwracają max indeks tablicy stąd wiemy ile mamy aktualnie połączeń - (w zasadzie dublują swoją funkcjonalność ![]() Oglądałem kilka takich skryptów z zastosowaniem różnych kombinacji funkcji stream, socket itd. i nie do końca rozumie różnicę między nimi np. czym się różni utworzenie socketu za pomocą "stream_socket_client" a "stream_socket_server" intuicyjnie wiadomo o co chodzi ale chociażby przykładowy serwer a linku w poście powyżej korzysta z funkcji "stream_socket_client" a nie server ? Ten post edytował phpmack 27.06.2011, 18:50:30 |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 31.05.2025 - 00:44 |