Найти - Пользователи
Полная версия: проблема с сокетами
Начало » Network » проблема с сокетами
1
randint_1_1
Приветствую всех.
Столкнулся довольно давно с такой проблемой, долго думал и пробывал разные вещи но ничего толкового не придумал изза непонимания причины проблемы.
Суть проста.Есть клиент,есть сервер.Клиент подключается к серверу и ждёт данных и на основе полученных данных вызывает определённую функцию.По началу всё работает,но если данные не будут приходить гдето минут 5 и более то соединение застывает,netstat с обеих сторон говорит что они подключены друг к другу но вот данные уже не идут клиенту.Пробовал ставить keepalive с обеих и не с обеих сторон - не помогает.Тогда пришла другая идея.Сервер в отдельном потоке раз в 2 минуты шлёт несколько байт клиенту,получился эдакий пинг.Если таким образом пинговать то всё работает без проблем.Хотел бы у вас спросить почему такое происходит и есть ли более красивое решение?
p.s. серверная часть на ubuntu,клиентская на windows
GreyZmeem
Вопрос на SO 1-в-1 как ваш: http://stackoverflow.com/questions/12248132/how-to-change-tcp-keepalive-timer-using-python-script
randint_1_1
GreyZmeem
Вопрос на SO 1-в-1 как ваш: http://stackoverflow.com/questions/12248132/how-to-change-tcp-keepalive-timer-using-python-script
в том то и дело что пробовал ставить keepalive и на сервере и на клиенте - не помогает, помогает только ручной пинг в духе s.send('ping')
sypper-pit
Может хоть код представите , там уж и будем разбираться , как клиент и как сервер взаимодействуют.
o7412369815963
randint_1_1
в том то и дело что пробовал ставить keepalive и на сервере и на клиенте - не помогает, помогает только ручной пинг в духе s.send('ping')
Не слышал про “keepalive” для сокетов, а вот ручной пинг - это норма. По настоящему нет никакого соединения, просто периодический приходят пакеты, при этом считается соединение есть, если пакет не приходит определенное время (timeout) то “создается” разрыв.
Так же вы можете наткнуться на переразбиение пакетов (особенно при высокой нагрузке), например сервер отправил 3 пакета , а клиенту может прийти 2 пакета: , и это нужно учитывать.

Что-б не думать о таких нюансах, можно использовать zmq или т.п. там и “пинги” и пакеты и др. нюансы предусмотрены, вот неплохая вводная статья: http://nichol.as/zeromq-an-introduction
o7412369815963
Почитал про keepalive, штука не плохая, похоже в винде и линухе коды (и названия) разные на это дело, в винде 0x8, в линухе 0x10
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB