Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [teoria] Socket a wiele połączeń
Forum PHP.pl > Forum > PHP
PMadej
Dawno tu nie pisałem ale nurtuje mnie jeden problem,

Swego czasu korzystałem ze skryptu Daemona napisanego w php przez Setha i dołączyłem sobie do niego obsługę i nasłuchiwanie socketów. Jednak miałem z tym 2 problemy

1) skrypt przy nasłuchiwaniu wykonywał odczyt z socketa w pętli nieskończonej co w dziwny sposób potrafiło zajechać procesor na maxa. Tu pojawia się pierwsze pytanie jak zoptymalizować skrypt, żeby zmniejszyć do minimum wykorzystanie procesora, a jednocześnie nie spowodować tego, że połączenie zostanie odrzucone (np sleep() ) Chyba że nie będzie i sleep tu się sprawdza.

2) skrypt otwiera tylko jeden socket na danym porcie i przyjmuje tylko jedno połączenie (z tego zrozumiałem tak jest to zaimplementowane w php) i dopiero po zakończeniu tego połączenia może ustanowić kolejne. Jakieś teoretyczne propozycje jak obsłużyć wiele połączeń?

Narazie nie podaje kodu bo uważam te rozważania za bardziej teoretyczne niż prośbę o konkretne rozwiązania, choć przykłady funkcji które mógłbym zastosować są jak najbardziej pożądane.

Pozdrawiam
PMadej
dr_bonzo
Cytat
socket_select --  Runs the select() system call on the given arrays of sockets with a specified timeout

zwraca ci socket z ktorego mozesz odczytywac

Cytat
After the socket socket has been created using socket_create(), bound to a name with socket_bind(), and told to listen for connections with socket_listen(), this function will accept incoming connections on that socket. Once a successful connection is made, a new socket resource is returned, which may be used for communication


resource socket_accept ( resource socket ) zwroci ci nowy socket po zaakceptoaniu polaczenia.
PMadej
W manualu o socketach po przejrzeniu wszystkich funkcji z nimi związanych natrafiłem na świetny przykład który pozwoli mi zrozumieć działanie socketów w php i rozwiązać w 100% mój problem.
Dla zainteresowanych zamieszczam link do ww. przykładu. jest to czat na zasadzie broadcastu: przyklad
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.