![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 29 Pomógł: 0 Dołączył: 29.08.2002 Skąd: Bydgoszcz Ostrzeżenie: (0%) ![]() ![]() |
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ć). -------------------- Pozdrawiam,
Solitary |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 384 Pomógł: 0 Dołączył: 3.04.2003 Skąd: Chorzow Ostrzeżenie: (0%) ![]() ![]() |
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. |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 29 Pomógł: 0 Dołączył: 29.08.2002 Skąd: Bydgoszcz Ostrzeżenie: (0%) ![]() ![]() |
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... -------------------- Pozdrawiam,
Solitary |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 384 Pomógł: 0 Dołączył: 3.04.2003 Skąd: Chorzow Ostrzeżenie: (0%) ![]() ![]() |
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.
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 18.07.2025 - 00:44 |