Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.03.16;
Скачать: CL | DM;

Вниз

Вопрос по отслеживанию подключений   Найти похожие ветки 

 
FireMan_Alexey ©   (2007-06-20 20:08) [0]

Наверное вопрос переадресуют, но мне кажется что это в эту ветку!
Мне нужен совет, название и где взять программу, которая могла бы отслеживать подключения и что передается через LoopBack(127.0.0.1) без сетевой карты.
Нужно проследить сколько подключений осуществляет IE к серверу Apache и что передает (туда/обратно).

Сразу поясню для чего это нужно(чтобы снова никто не занимался телепатией).

Я написал потоковый прокси. Установил Апачи для тестирования. Через прокси соединения к Апачам осуществляются, но только до 10 соединений. После этого как я получаю 10 соединений Апачи выдают ошибку 10061 WSAECONNREFUSED и вдальнейшем не работают вообще(ну разумеется до перезагрузки Апачей, т.е. остановки и запуска. Просто пункт рестарт не дает никакого результата).
НО когда с апачами работает ИЕ, таких глюков не наблюдается. Я могу просмотреть весь сайт без потери соединения. Я хотел бы выяснить как именно ИЕ удается получить всю информацию и не потушить Апачи?


 
FireMan_Alexey ©   (2007-06-20 20:14) [1]

Забыл написать, что 10061 получает даже IdMappedPortTCP после 10 коннектов. ;(


 
Anatoly Podgoretsky ©   (2007-06-20 20:26) [2]

WinXP


 
FireMan_Alexey ©   (2007-06-20 20:27) [3]

>[2]
что это значит?


 
Anatoly Podgoretsky ©   (2007-06-20 20:27) [4]

> FireMan_Alexey  (20.06.2007 20:27:03)  [3]

То что ограничение на 10 подключений


 
FireMan_Alexey ©   (2007-06-20 20:28) [5]

Тестировал на 2000!


 
Anatoly Podgoretsky ©   (2007-06-20 20:28) [6]

> FireMan_Alexey  (20.06.2007 20:28:05)  [5]

2000 если не сервер тоже самое.
На Home вообще 5


 
FireMan_Alexey ©   (2007-06-20 20:30) [7]

Но тогда как работает ИЕ?
И у меня XP Professional а не Home!


 
Anatoly Podgoretsky ©   (2007-06-20 20:31) [8]

Потому и 10 а не 5
Насчет ИЕ к нему никаких подключений не делается.


 
FireMan_Alexey ©   (2007-06-20 20:32) [9]

Так а после 10 соединений сервер падает!
Т.е. даже если все соединения закрыты, то сервер выдает 10061!


 
Anatoly Podgoretsky ©   (2007-06-20 20:32) [10]

> FireMan_Alexey  (20.06.2007 20:32:09)  [9]

Это уже ошибка в программе.


 
FireMan_Alexey ©   (2007-06-20 20:33) [11]

В какой? в апачах?


 
FireMan_Alexey ©   (2007-06-20 20:35) [12]

Я чет не пойму, как ИЕ соединяется и знает сколько соединений может держать сервер?


 
FireMan_Alexey ©   (2007-06-20 20:45) [13]

Я наверное не правильно выразился, когда мой прокси получает 10061 от сервера, то он ждет 5 интервалов по 5 секунд и пытается коннектится снова. Но если даже мой сервер я выключаю и все соединения закрываются, то апачи постоянно выдает 10061 даже для ИЕ пока не перезагрузиш.
При чем тут соединения, когда все уже закрыто!
Или это ограничение только на 127.0.0.1
И как мой сервер держит 30 соединений по TCP!
или ты имееш ввиду Сокетов ожидающих соединения.


 
Anatoly Podgoretsky ©   (2007-06-20 20:52) [14]

> FireMan_Alexey  (20.06.2007 20:35:12)  [12]

ИЕ не знает


 
FireMan_Alexey ©   (2007-06-20 20:55) [15]

Я знаю что Вы проф!
Помогите пожалуйста, потому что уже скоро голова сломается :)


 
Anatoly Podgoretsky ©   (2007-06-20 21:00) [16]

Количество подключение можешь проверить запуском на сервере NT4/2000/2003


 
FireMan_Alexey ©   (2007-06-20 21:02) [17]

Получается что мне нужно ограничивать подключения?
не больше 10 или 5 и потоки запускать по мере передачи данных?
Но представим такой момент у меня к моему Прокси соединяется 6 клиентов и первые пять на сутки грузят трафик выкачивая фильмы, а шестому остается ждать сутки для просмотра какого-нибудь сайта?
Или вы имели ввиду 10 соединений для одного клиента? Тогда все становиться яснее!


 
Anatoly Podgoretsky ©   (2007-06-20 21:09) [18]

> FireMan_Alexey  (20.06.2007 21:02:17)  [17]

Я имею ввиду (точнее Микрософт) 10 соединений на сервер, в качестве которого выступает твоя машина, любых соединений.


 
FireMan_Alexey ©   (2007-06-20 21:19) [19]

С этим разобрались :) , теперь можно судить о том, что ИЕ использует меньше кол-во соединений чем максимальное! Но почему когда я превышаю кол-во соединений получаю 10061, после жду до тех пор пока все соединения будут закрыты и конекчусь снова я получаю 10061?
Если это особенность Апачей, то почему когда я тестировал сервер в инете я получал такие же результаты?


 
Anatoly Podgoretsky ©   (2007-06-20 21:20) [20]

> FireMan_Alexey  (20.06.2007 21:19:19)  [19]

Еще раз ИЕ не использует соединений.


 
Anatoly Podgoretsky ©   (2007-06-20 21:21) [21]

Ты путаешь серверные соединения с клиентскими.


 
FireMan_Alexey ©   (2007-06-20 21:36) [22]

Я не путаю!

1. ИЕ соединяется с моим сервером
2. Мой сервер пытается соединиться с сервером Апачей
3. Если соединяется то работает простая транспортная логика (получил/отправил)
4. Если нет включаю таймер и жду освобождения других соединений!
Вот тут то и получается, что сервер Апачей постоянно выдает 10061.
Потом выключаю свой сервер закрывая все соединения.
Переключаю ИЕ на прямую работу с Апачами и пытаюсь соединиться!
Также получаю 10061!!!! Вот этого я не могу понять!!!!!
Раз ХР поддерживает 10 серверных соединений, то почему после закрытия всех сокетов на моем сервере и перенастройке соединения ИЕ я получаю ошибку! Хотя Апачи не сообщает не о каких ошибках и делает вид как буд-то работает нормально!


 
FireMan_Alexey ©   (2007-06-20 21:38) [23]

В первом и втором пункте используется серверные соединения!
У моего сервера через "Ацепт" и аналогично у Апачей!


 
Anatoly Podgoretsky ©   (2007-06-20 21:40) [24]

> FireMan_Alexey  (20.06.2007 21:36:22)  [22]

KeepAlive


 
FireMan_Alexey ©   (2007-06-20 21:53) [25]

Даже после CloseSocket?


 
FireMan_Alexey ©   (2007-06-20 22:01) [26]

Server присылал Connection: Close!


 
FireMan_Alexey ©   (2007-06-20 22:05) [27]

После чего сервер закрывал соединения!
При закрытии соединения с сервером на уровне клиента это расценивается как отказ от запроса! Причем не важно KeepAlive или нет.
Если я в чем-то не прав поправте меня!


 
Сергей М. ©   (2007-06-21 08:18) [28]


> FireMan_Alexey ©   (20.06.07 22:05) [27]


Возьми любую утилитку а-ля TCPMonitor, TDIMonitor и посмотри, какие гнезда открыты и какие соединения установлены Апачем в этой проблемной ситуации.


 
Сергей М. ©   (2007-06-21 08:21) [29]


> где взять


Здесь

http://www.microsoft.com/technet/sysinternals/default.mspx

Только не вздумай запускать TCPMon на W2k-сервере - она тут же порушит сетевые интерфейсы


 
FireMan_Alexey ©   (2007-06-22 00:16) [30]

>Сергей М.
Посмотрел TCPView
Спасибо полезная программа!
Все оказалось как описывает Anatoly Podgoretsky ©
Теперь не ясно одно, когда работает мой сервер и при разрыве соединения TCPView показывает что все соединения с сервером(т.е. у сервера) имеют статус TIME_WAIT, хотя мой сервер закрыл все соединения с клиентом и сервером!
Почему именно так я не знаю!

Вот кусок кода:

Procedure Execute;
Begin
...

FEvents[0]:=WSACreateEvent;
FEvents[1]:=WSACreateEvent;
WSAEventSelect(FClientS,FEvents[0],FD_READ or FD_WRITE or FD_CLOSE);
WSAEventSelect(FServerS,FEvents[1],FD_READ or FD_WRITE or FD_CLOSE or FD_CONNECT);

While Not Terminated Do
Begin
  ...
//   Транспортная логика!
  ...
End;

WSACloseEvent(FEvents[0]);
WSACloseEvent(FEvents[1]);
CloseSocket(FClientS);
CloseSocket(FServerS);

End;

Причем когда я проверял мой сервер(мною написанный), то соединения закрывались нормально! Почему Апачи не закрывает сокеты, после дисконнекта к нему(от него), не понятно?! Далее получается, что накапливается 10 соединений и при этом сервер перестает отвечать на какие-либо попытки коннекта!
Да замечу, что когда мой сервер не закрывал сокет после дисконнекта статус имел значение CLOSE_WAIT а не TIME_WAIT.
Может кто знает почему именно так?


 
FireMan_Alexey ©   (2007-06-22 00:34) [31]

Теперь не ясно одно, когда работает мой сервер и при разрыве соединения TCPView показывает что все соединения с сервером(т.е. у сервера) имеют статус TIME_WAIT, хотя мой сервер закрыл все соединения с клиентом и сервером!
Почему именно так я не знаю!


Простите наплел сильно!
Т.е. Когда ИЕ работает через мой прокси, то после дисконнекта, который совершает Апачи, предварительно прислав Connection: close, TCPView показывает что у Апачей все открытые и закрытые на тот момент сокеты находятся в состоянии TIME_WAIT. Как заставить Апачи закрывать все сокеты я не знаю. Т.к. всегда считал, что когда я получаю событие FD_CLOSE, тем более без кода ошибки, то сервер перед этим уже закрыл свой сокет(ну не тот, который ждет подключения конечно :) ) и поэтому я не могу понять, что я сделал не так!?!?!? И как Апачам удается послать оповещение о закрытии соединения со своей стороны и оставить сокет в режиме ожидания? :)


 
FireMan_Alexey ©   (2007-06-22 00:36) [32]

>>Anatoly Podgoretsky
Очень нужна Ваша помощь, потому что я сам сейчас не в силах понять, то что происходит на стороне Апачей и каким образом он это делает!


 
Anatoly Podgoretsky ©   (2007-06-22 00:38) [33]

> FireMan_Alexey  (22.06.2007 00:34:31)  [31]

Не знаю как, но важно, что получается свыше 10 разрешеных соединений к серверу. О чем я несколько раз и говорил. Решение естественное, если надо свыше 5/10 соединений, надо использовать серверную платформу, где таких ограничений нет.


 
Anatoly Podgoretsky ©   (2007-06-22 00:40) [34]

> FireMan_Alexey  (22.06.2007 00:36:32)  [32]

Я не знаю, что делать с Апачем, но он держит открытыми соединения, меня этот вопрос просто не интересовал, я для этой цели использую серверную платформу - или Линукс или Win2003
Не пытаюсь на Камазе устраивать гонки по формуле 1


 
Сергей М. ©   (2007-06-22 08:27) [35]

Если я правильно понял, то


> CloseSocket(FClientS);


Здесь ты закрыл некое одно соединение с Апачем.
А где закрытие других соединений с ним ?


> CloseSocket(FServerS);


Здесь ты закрыл свое слушающее гнездо.
А где закрытие существующих соединений браузера с твоим сервером ?


 
FireMan_Alexey ©   (2007-06-22 14:14) [36]

CloseSocket(FClientS); - сокет соединение с ИЕ
CloseSocket(FServerS);- сокет соединение с Апачами(или инетом)

Слушающий сокет находится в другом код потоке!


 
FireMan_Alexey ©   (2007-06-22 14:21) [37]

Я не хочу обидеть, но в вопросе я указал, что прокси потоковый!
Т.е. каждое соединение находится в отдельном код потоке(TThread).
А значит по завершению потока каждый сокет будет закрыт!
Это я гарантирую! :)


 
Сергей М. ©   (2007-06-25 08:50) [38]


> прокси потоковый


Я тоже не хочу обидеть, но "потоковый" твой прокси или "не потоковый" - по барабану.


> CloseSocket(FClientS); - сокет соединение с ИЕ
> CloseSocket(FServerS);- сокет соединение с Апачами(или инетом)


Страннное у тебя смысловое именование идентификаторов ..

Твой прокси по отношению к Апачу является клиентом, а сокет почему-то именуется FServerS. По отношению к браузеру твой прокси является сервером, в то время как соотв.сокет почему-то FClientS..

Это, конечно, не суть как важно, но путаницу вносит.


> каждое соединение находится в отдельном код потоке(TThread)


Мне не понятно, где ты выграл, пользуя вместо прямого API-программирования потоков готовый поточный класс TThread, в то время как транспорт программируешь непосредственно на WSAPI, не прибегая к услугам готовых классов ..


 
FireMan_Alexey ©   (2007-06-27 14:26) [39]

Понимаешь, для меня было удобно сделать именно так!
При чем в полной версии в каждом потоке, для отдельных клиентов имеется ограничение по скорости передачи и т.д.
Скажу сразу, я не очень люблю ловить ексепты, поэтому лучше TThread и WSAPI для Меня :)
Я поставил чужой прокси на мою машину и результат был тот же 10061 и Апачи умирают!
Из этого делаю вывод, что моя логика работает, а это все особенности самих апачей! :)
Я потом попробую поменять сервер на какой-нибудь другой
А выигрывать я не хотел! :)
Просто этот проэкт я писал еще 2004, ну а сейчас не очень хотелось бы переделывать его.
Испробывал я и компоненты TSocketClient/Server но они не удовлетворили мои запросам! тем более что в моем случае лучше было писать на WSAPI.
А насчет TThread-a, пока не хочу изобретать вилосипед заново :)
На счет названия переменных.
Мой опыт показывает, что когда на этот форум передаю исх. коды то переменные типа
l1, k1 - и т.д. тоже не показывают для чего они используются.
Мой подход насчет FClientS - т.е. на данном сокете находится клиент т.е. ИЕ,
аналогично FServerS - сокет соединен с сервером.
Для меня так легче, тем более я пишу для себя и не претендую на супер оптимальный и понятный код. :)


 
Сергей М. ©   (2007-06-28 08:36) [40]


> Испробывал я и компоненты TSocketClient/Server но они не
> удовлетворили мои запросам


Интересно, каким ?


> насчет TThread-a, пока не хочу изобретать вилосипед заново


А его и не надо изобретать)

Просто тут логичней бы было использовать BeginThread(), коль уж так тебе так претят классы с ихними исключениями, кои ты так невзлюбил.


> Апачи умирают!
> Из этого делаю вывод, что моя логика работает, а это все
> особенности самих апачей


Не обратить ли тебе серьезное внимание на версию и конфигурацию Апача ?



Страницы: 1 2 вся ветка

Текущий архив: 2008.03.16;
Скачать: CL | DM;

Наверх




Память: 0.58 MB
Время: 0.014 c
3-1193160878
Muto
2007-10-23 21:34
2008.03.16
Документооборот в конструкторском отделе. (Access+D7)???


3-1193041148
kyn66
2007-10-22 12:19
2008.03.16
Связь Delphi - 1C


6-1182506570
Grega
2007-06-22 14:02
2008.03.16
Поиск адресов по номеру телефона


3-1193258614
Винни-Пух-Пух-Пух
2007-10-25 00:43
2008.03.16
Какие права и шары нужны для обращения к базе FB (+) ?


2-1203185365
guav
2008-02-16 21:09
2008.03.16
Хитрые структуры данных.