LINUX.ORG.RU

Как работать с сокетом при плохом соединении?


0

0

небольшой оффтоп: мобилки с java

с сокетом работает 1 тред, который его постоянно слушает (читает, доступны только блокирующие операции), временами из основного треда в этот сокет что-то пишется. Все работает идеально, пока... пока не запускается через gprs, где соединение постоянно рвется, пинги по 30 секунд временами и похоже какое-то буфферизирование, поскольку данные приходят потом большими пачками. Поскольку приложение мобильное, то это безобразие надо как-то решить...

Я вот думаю завести еще один тред, который будет долбить соединение пингами (отдельными запросами) и если за 10 секунд ничего с сервера не получено, то будет рвать и пересоединять сокет. Но при такой схеме непонятно, прошли данные или нет... А если буфферизация большая, то есть риск вообще постоянно флудить запросами, так как приложение будет считать, что данные не прошли.

Мало того, что тред добавлять не охота (мобилки же), так и проблему с буфером это не решает... Подскажите чего?

это не только мои кривые руки, бомбус глючит временами аналогично.

>пока не запускается через gprs, где соединение постоянно рвется, пинги по 30 секунд временами и похоже какое-то буфферизирование, поскольку данные приходят потом большими пачками.

зато дошли :) можно начать работать с udp, но там нет гарантий доставки и сами будете сооружать себе tcp.

stave ★★★★★
()


ага. а после от таких вот приложеньиц юзерам счета за GPRS приходят с оплатой до пенсии. особенно в роуминге. а ведь вроде ж ничего не делали..

// wbr

klalafuda ★☆☆
()
Ответ на: комментарий от r_asian

> А писал бы не под оффтоп - пользовал бы SIGPIPE, SIGIO, и был бы счастлив.

Если бы у бабушки... Ну дальше сам знаешь...

EmStudio
() автор топика
Ответ на: комментарий от stave

> зато дошли :) можно начать работать с udp, но там нет гарантий доставки и сами будете сооружать себе tcp.

Ненене, udp не надо, ибо сервер уже готов, написан и отлажен. Правда с этими пингами я уже и так tcp местами изобретаю.

EmStudio
() автор топика
Ответ на: комментарий от klalafuda

> ага. а после от таких вот приложеньиц юзерам счета за GPRS приходят с оплатой до пенсии. особенно в роуминге. а ведь вроде ж ничего не делали..

Ага, а с этими операторами, у которых скорость мегабайт/час, даже залогиниться выходит на 20 раз. Хотя надо всего 200 байт переслать.

EmStudio
() автор топика

не, пинги не надо.

лучше уж заведи тред, в котором будешь по таймауту сокет прибивать (если сам сокет такое не позволяет).

и еще я бы добавил в протокол id для элементарных сообщений, чтобы знать, какой дошел, а какой - нет, если потери недопустимы.

и да, udp был бы в этом случае предпочтительней.

xydo ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.