idHTTP i wiszące połączenia

Programowanie – epizod z idHTTP.

Wiem, wiem, to już prawie było… ;)



Swoją drogą – mięczak, potrzebował wody… ;)
Dziś zrobiłem kolejne podejście do połączeń HTTP w ICQu i… hurra! Wreszcie wszystko działa. No, prawie. Niektórzy być może pamiętają moje traumatyczne przejścia, kiedy przy poprzedniej próbie dorobienia tej opcji serwer widział 100 fantomowych połączeń nawet 2 tygodnie po ich zakończeniu (i wielu restartach z mojej strony) i jedyne, co pomogło to … restart tegoż serwera. Tym razem jest niby lepiej, niemniej jednak nie mogę pojąć, czemu to działa tak, jak działa.
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 ;))

Podobne wpisy:

2 komentarze jak dotąd

  1. tlewap 16 lutego 2008 12:54

    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…

  2. ikari 1 marca 2008 14:33

    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…)

Zostaw komentarz

Proszę być grzecznym i mówić na temat :). Twój adres e-mail nie zostanie opublikowany.

XHTML: Możesz używać następujących tagów XHTML:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>