Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> PHP CLI komunikator, Komunikacja między sieciami
session
post 25.06.2015, 16:06:56
Post #1





Grupa: Zarejestrowani
Postów: 112
Pomógł: 22
Dołączył: 11.04.2010
Skąd: Tarnów

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


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 .

Ten post edytował session 25.06.2015, 16:08:11
Go to the top of the page
+Quote Post
Xelah
post 25.06.2015, 19:32:10
Post #2





Grupa: Zarejestrowani
Postów: 139
Pomógł: 24
Dołączył: 12.05.2013
Skąd: Hamburg

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


Poczytaj sobie ten artykuł:

http://www.binarytides.com/php-socket-programming-tutorial/
Go to the top of the page
+Quote Post
session
post 26.06.2015, 18:22:43
Post #3





Grupa: Zarejestrowani
Postów: 112
Pomógł: 22
Dołączył: 11.04.2010
Skąd: Tarnów

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


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

Ten post edytował session 26.06.2015, 18:23:38
Go to the top of the page
+Quote Post
CuteOne
post 26.06.2015, 20:17:16
Post #4





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

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


Co do logów zainteresuj się error_handlerem oraz register_shutdown_function lub error_log (osobiście nie używałem wink.gif )

Ten post edytował CuteOne 26.06.2015, 20:19:49
Go to the top of the page
+Quote Post
Xelah
post 27.06.2015, 15:01:49
Post #5





Grupa: Zarejestrowani
Postów: 139
Pomógł: 24
Dołączył: 12.05.2013
Skąd: Hamburg

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


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.
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: 14.07.2025 - 06:56