Промежуточный прокси на php, тормоза при транзите трафика.

silvek

Новичок
Промежуточный прокси на php, тормоза при транзите трафика.

Доброго времени суток!

Я должен реализовать промежуточный прокси-сервер, который транслирует пакеты до узла назначения. Объемы трафика совсем небольшие, поэтому никаких других технологий не требуется.

Схема такая:
+++++++ +++++++++++
==>|PHP- |==>| УЗЕЛ |
<==|ПРОКСИ|<==| НАЗНАЧЕНИЯ |
+++++++ +++++++++++

Использую технологию сетевых сокетов:

возникают необоснованные задержки при загрузке некоторых файлов - по факту, картинок - т.е. бинарных файлов.

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

PHP:
			while ($out = socket_read($socket, 65535)) 
			{
				rput(".");
				$output .= $out;
			};
Процесс загрузки обозначается точками.
Иногда точки летят быстро, а иногда загружается одна и происходит пауза в полминуты. Очень неудобная проблема, как ее можно отладить и решить?
Пробовал ставить размер принимаемых данных в 256 - те же симптомы.

*приложение писал для консольного php, т.е. вывод идет на консоль.
 

whirlwind

TDD infected, paranoid
Ну, я бы взял какую нить проверенную утилиту, например ping, погонял бы ее в течение суток и посмотрел на потери пакетов. Если не зависает, значит с буфферами все норм.

PS. а вообще ту бы socket_select и запись во вторую сторону паралельно с чтением я думаю надежней было бы.
 

dimagolov

Новичок
whirlwind, да хоть потому что udp может совсем по другому ходить, чем 80-й порт tcp. У нас, к примеру, сервер стоит на колокейшине и нереальным IP. реальный висит на роутере, который заодно NAT & FW и который отвечает на ICMP пробрасывая на тазик лишь пару портов.

п.с. за поправку про ICMP спасибо
 

cDLEON

Онанист РНРСlub
PS. а вообще ту бы socket_select и запись во вторую сторону паралельно с чтением я думаю надежней было бы.
+1;
[m]socket_select[/m]
whirlwind, да хоть потому что udp может совсем по другому ходить, чем 80-й порт tcp. У нас, к примеру, сервер стоит на колокейшине и нереальным IP. реальный висит на роутере, который заодно NAT & FW и который отвечает на UDP.
А при чём здесь UDP ? :confused:
 

kruglov

Новичок
Некоторые сервера не разрывают сразу соединение, поэтому надо считать, скачали ли мы столько данных, сколько в Content-length содержится, либо длина очередного chunkа - 0
 

QQQ

Новичок
по http тащишь?
если да - то шли connection: close
ну или сам конец отлавливай по content-length ответа и руби соединение
 
Сверху