![]() |
Модераторы: xvr |
![]() ![]() ![]() |
|
slater |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 168 Регистрация: 20.11.2009 Репутация: -2 Всего: -4 |
привет всем!
такой вот вопрос, помогите плиз разобраться. обычное клиент/серверное приложение: после коннекта на сервер, делаю fork() для каждого соединения, читаю данные со стороны клиента и отвечаю. все как бы хорошо работает, но я не закрываю соединение ни со стороны клиента, ни со стороны сервера(мне нужно, чтобы соединение было постоянным с клиентом все время жизни клиента). а вот например, через полчаса данные с клиента уходят, а до сервера не доходят(хотя сокет для этого клиента сервер не закрывает и на сервере этот дочерний процесс продолжает жить)... хм с чем это связано? тестирую через глобальную сеть таймайт что ли где у сокета стоит? как мне сделать, чтобы соединение было постоянным с клиентом? возможны ли какие таймауты у самого сокета со стороны ядра? |
|||
|
||||
rsm |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 999 Регистрация: 16.3.2005 Репутация: 3 Всего: 62 |
||||
|
||||
slater |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 168 Регистрация: 20.11.2009 Репутация: -2 Всего: -4 |
rsm,
спасибо net.ipv4.tcp_keepalive_time / net.ipv4.tcp_fin_timeout менять только на стороне клиента или же настраивать индивидуально каждый вновь создаваемый сокет на стороне сервера? |
|||
|
||||
svlary |
|
||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 207 Регистрация: 8.9.2009 Репутация: 4 Всего: 4 |
Это действительно НЕОБХОДИМО ? На мой взгляд - очень опасное проектное решение.
Т.е. эти полчаса соединеие просто висело? А зачем ? Может быть все-таки воспользоваться классическим методом
? |
||||
|
|||||
slater |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 168 Регистрация: 20.11.2009 Репутация: -2 Всего: -4 |
svlary,
это понятно мне нужна просто некая обратная связь с клиентом периодически |
|||
|
||||
svlary |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 207 Регистрация: 8.9.2009 Репутация: 4 Всего: 4 |
Вы имеете в виду, что не только клиент может послать запрос на сервер, но и сервер должен иметь возможность опрашивать клиентов ? Технически это не так просто, как кажется... Надеяться на то, что соединение не разорвется в течении длительного периода - это тешить себя иллюзиями. Такое возможно только в локалке да и то - не всегда. Можно попробовать вести на сервере таблицу IP клиентов. В момент установления соединения заносить в нее IP и идентификатор пользователя. С тем, что бы в любой момент можно было обратиться по этому IP к клиенту. Но это решение обладает существенной ненадежностью, так как IP клиента может измениться в любой момент. Вплоть до того, что срок лицензии DHCP может кончится прямо во время сеанса связи. Можно попробовать использовать сервис типа http://www.dyndns.com/ или подобные. Часть этих сервисов даже бесплатна. Можно каждому клиенту выделить доменное имя (скажем) четвертого уровня (это - бесплатно) и обращаться к ним по URL, а не по IP. Пожалуй, Это - самое надежное решение. Но тут встает проблема с обновлением таблиц на DNS серверах... Короче говоря : идея о том, что сервер должен иметь возможность обращаться к клиенту - плохая идея! И реализовать ее аккуратно практически невозможно. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С/С++: Программирование под Unix/Linux" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |