Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Serwery usług internetowych
Forum PHP.pl > Forum > PHP
Solitary
Witam,


Mam kolejny problem... Otóż, załóżmy, że chcę napisać własny serwer POP3, jak byście rozwiązali wysyłanie maili.

Problem jest taki, iż jeśli użytkownik zechce ściągać maila o rozmiarze np. 20 MB, to żaden inny użytkownik nie będzie mógł wysłać/odebrać żadnych informacji, dopuki nie skończy się ściąganie e-maila 20megowego.

Myślałem nad tym, już nawet próbowałem, przeplatać (wysyłam 2 KB i czytam innych userów, i ich wykonuje później znów wysyłam 2 KB i dalej czytam innych userów...), ale to może słabo działać.

Najlepszym rozwiązaniem było by _duplikowanie_ skryptu, tak jak to jest w C++, że gdy user się loguje to przydzielany mu jest osobna kopia programu.

Ale teraz powstaje pytanie czy w skryptach php odpalanych z linii komend, istnieje taka możliwość ? Jeśli tak to bardzo bym prosił, żeby ktoś mi wytłumaczył jak to zrobić i jak będzie się zachowywał zduplikowany skrypt ?

Z góry dziękuję za pomoc.

P.S. Wiem, że pewnie uważanie, że powinienem to napisać w C++ lub skorzystać z istniejących skryptów, ale ja chce to zrobić dla własne satysfakcji, i najlepiej w php, gdyż C++ jeszcze nie umiem (mam zamiar się nauczyć).
uboottd
socket_select

Ogolnie, otwierasz socket do sluchania, jak przyjdzie nowe polaczenie robisz nowy socket ktorym bedziesz gadal z klientem ktory wlasnie sie polaczyl i dopisujesz ten socket do listy dla socket_selecta. Glowna petla to czekanie az socket_select cos zwroci, sprawdzenie ktory socket cos zglasza, z ktorym klientem jest on zwiazany, co trzeba z nim zrobic, zrobienie tego i powrot do selecta.
Solitary
wiem, mi nie chodzi o ODBIERANIE informacji od klienta

mi chodzi o WYSYŁANIE...

bo jak natrafie na komende od klienta, który będzie kazała mi wysłać maila który ma 20 MB, to zaczyna się pętla (czytaj, wyślij.. czytaj, wyślij) i te 20 MB musi przepchnąć, żeby znów wywołać socket_select i znów obsłuży klienta

a w czasie kiedy ktoś będzie odbierał 20 MB, ktoś inny może też chcieć odebrać poczte... a wtedy bede musiał czekać, aż tamten wszystko ściągnie....

w C++ jest to tak, że programy się duplikują i każdy obsługuje jednego klienta...
uboottd
Robisz to w jednym. socket_select czeka zarowno na sockety z ktorych czytasz jak do ktorych piszesz. pakujesz kawalek danych do socketa i czekasz az ci socket_select zwroci ze znow mozesz pisac, a w miedzyczasie czytasz/piszesz do innych co do ktorych sockect_select mowi ci ze mozesz.
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.