Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: PHP CLI komunikator
Forum PHP.pl > Forum > PHP
session
Planuję zrobić komunikator wykorzystujący PHP cool.gif , czy do komunikacji między hostami w różnych sieciach potrzebny jest web server ? Chciałbym, uruchamiać komunikator z poziomu konsoli (PHP CLI), nie wiem jednak jak nawiązać połączenie hostów i zapewnić komunikację między nimi bez używania web servera i delegowania portów w routerze. Załóżmy że mam sieć LAN i router podłączony do internetu, oraz drugą taką sieć, każda z nich ma 1 publiczny adres IP. Na hoście w danej sieci z uruchomionym komunikatorem podawalibyśmy adres IP drugiej i tak nawiązywane byłoby połączenie. Routery w większości wykorzystują NAT, w ramce oprócz adresu IP przesyłają numer portu, dzięki czemu odpowiedź trafia do odpowiedniego hosta. Konkretniej chodzi mi o zachowanie podobne do działania przeglądarki internetowej, pomimo że przeglądarki na różnych hostach wysyłają zapytania HTTP to odpowiedź trafia tam gdzie trzeba. Co proponujecie ? Jakiej funkcji użyć do przesyłania wiadomości: cURL / HTTP ? Jak sprawdzać, czy host z którym chcemy się połączyć jest dostępny ? Ogólnie: szukam sposobu na przesyłanie wiadomości między hostami wykorzystując PHP wink.gif .
Xelah
Poczytaj sobie ten artykuł:

http://www.binarytides.com/php-socket-programming-tutorial/
session
Dzięki wielkie smile.gif Dokładnie o to chodziło. Po zabawie z siecią, zaporą i portami udało mi się nawiązać połączenie między hostami w jednej sieci LAN, jednak jeden z nich musiał działać jako serwer, a drugi jako klient i tutaj moje pytanie, czy zawsze musi być serwer wykorzystany do zestawienia połączenia ? Nie może być client-client ? Na hostach uruchomiłem ten sam skrypt wykonujący socket_create() i socket_connect() z odpowiednimi IP i niestety połączenie nie zostało nawiązane. Dopiero zamienienie socket_connect() na socket_bind() + socket_listen() + socket_accept() dało zamierzony efekt, ale zakładając, że chciałbym stworzyć coś w rodzaju konferencji, wtedy po odłączeniu serwera wszyscy tracą połączenie między sobą sad.gif .

I mały offtop, ale związany z CLI, czego używacie jako error loga ? Ja zdecydowałem się na sysloga, czyli w windzie eventlog (dziennik zdarzeń), z tym że błędy PHP są traktowane jako informacja z aplikacji, a nie jako błąd. Korzystanie z pliku na etapie tworzenia jest dla mnie jakoś mało praktyczne. Ogólnie błędy mogłby być wyświetlane w konsoli, ale ponieważ nie korzystam bezpośrednio z cmd (wiersza poleceń) aplikacja jest zamykana i konsola znika zaraz po wystąpieniu błędu sad.gif
CuteOne
Co do logów zainteresuj się error_handlerem oraz register_shutdown_function lub error_log (osobiście nie używałem wink.gif )
Xelah
Specialistą od socketów i P2P nie jestem, ale czarno widzę zrobienie tego bez serwera centralnego. Ktoś zawsze serwerem być musi. Bo tylko serwer "czeka" na połączenia. Sam socket nie daje możliwości połączenia się do niego. Nie wiem, czy dało by się to jakoś rozwiązać zakładając, że każdy peer będzie w tym samym czasie i serwerem i klientem...

Nie wspominając już o tym, że jak pojawi się na drodze NAT to i tak bez serwera centralnego się nie obejdzie.
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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.