idHTTP i wiszące połączenia
Programowanie – epizod z idHTTP.
Wiem, wiem, to już prawie było… ;)
Swoją drogą – mięczak, potrzebował wody… ;)
Kod w Delphi, do zapytań HTTP używam idHTTP z pakietu Indy. Każde zapytanie ma nagłówek
Connection: Close – zarówno po stronie klienta jak i odsyłane przez serwer. Mimo to netstat po obu stronach (klienta i serwera) pokazuje, że połączenia HTTP wiszą sobie jeszcze spory kawałek czasu po zakończeniu zapytania. Czemu?Zasadniczy problem polega na tym, że wiszą dłużej niż trzeba czekać na nawiązanie kolejnego, zatem ich liczba rośnie. Jest to niebezpieczne nie tylko dla jakiejś tam stabilności któregokolwiek systemu (;P), ale i dla użytkownika, który znów może nagle dostać komunikat „BANG! Maksymalna ilość połączeń z tego IP przekroczona” na nie wiadomo jak długo. 10 sekund między kolejnymi odświeżeniami czata to za długo dla użytkownika, a za krótko, by liczba połączeń nie rosła. Prace nad HTTP po raz kolejny zostają zawieszone.
Help needed.
Masz czasem takie uczucie, że każdy Twój kod (czy cokolwiek tam sobie tworzysz ;)) zawsze musi mieć kilka naprawdę poważnych błędów różnego rodzaju? (tu wstaw sobie dowolną analogię do swojej twórczości) Też czujesz się czasem jak gówno a nie [tu wstaw określenie człowieka, który tworzy to, co Tobie znowu nie wyszło ;P]. Wybacz Panie, jestem tylko nędznym robakiem.
PS. Jakby co to poprawiłem co się dało w księdze gości i komentach – w tym nawet odpowiedziałem na 1 komentarz, który nigdy nie został wysłany ;) Gdyby coś nie działało, don’t hesitate to contact me (via gg/jabber/tlen – tylko nie zaczynajcie od pytania, czy jestem ;))

można by z góry założyć że połączenie jest zerwane…
A co jakiś czas wysyłać zgłoszenie do serverqa, jeśli nie dostanie zgłoszenia to znaczy ze jest odlączony…
Albo serwer musiałby odpytywać każdego klienta…
Nie wiem dokładnie w czym problem:)
Musiał bym widzieć kody w delphi…
To nie zależało ani od serwera, ani od klienta, ani nawet od kompilatora. Tak samo problem występował dla połączeń HTTP z ICQa do Polchatu, jak i dla pustych połączeń otwieranych przez PortFuck na innym testowym serwerze innej usługi. W tym drugim przypadku także z kilkuset sesji, kilkadziesiąt zawsze pozostawało „widmowych” – ot, takie niedoskonałości TCP/IP :P
Dawno tego nie ruszałem, a wirtualne Delphi ostatnio mi się zupełnie posypało (buu.. jak, kurde, wszystko…)