powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / зависает запрос к ASA 9 с Pocket PC
16 сообщений из 16, страница 1 из 1
зависает запрос к ASA 9 с Pocket PC
    #35314168
Andrew Nagorny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вопрос к профессионалам.
У меня написано приложение на PowerBuilder для PocketPC. сервер (ASA 9) находится на обычном компьютере.
Покет через WiFi подключается к серверу. И вот такая вот проблема:
Когда устойчивая связь, запускается запрос к базе данных. Запрос еще не завершен, но связь пропадает (зашли например в какое нибудь место где не ловится сетка), и программа висит на запросе больше 3 минут.

Что нужно сделать что бы сократить время такого зависона?
...
Рейтинг: 0 / 0
зависает запрос к ASA 9 с Pocket PC
    #35315265
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В PowerBuilder 9 и раньше точно не было события "потеря связи с базой" и обнаружить потерю можно было только послав новый запрос. Возможно в более новых PB такое событие наконец сделали. Про это лучше спросить на соседнем форуме PowerBuilder'а.

Зато для PB можно было сделать внешнюю дополнительную dll с одной функцией которая получала на вход хендл открытого клиентом ODBC коннекта, и хендл окна а потом вешала колбек на события. Получение message to client; потеря коннекта; коннект жив, но база думает и тд.
Пример работы я когда-то публиковал на rusug: http://www.rusug.ru/index.php?tree=21&mode=view&id=116
Там только работа с 'message to client', но если заглянешь в БОЛ, в SQL Anywhere® Server - Programming > SQL Anywhere Embedded SQL > Library function reference > db_register_a_callback function
Увидишь инструкцию как работать с остальными событиями из ESQL, а в asaodbc.h есть все константы для аналогичных вызовов через ODBC.
...
Рейтинг: 0 / 0
зависает запрос к ASA 9 с Pocket PC
    #35315692
iLLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
A "liveness timeout" не поможет? По умолчанию, он вроде 120 секунд стоит.


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
зависает запрос к ASA 9 с Pocket PC
    #35315888
Andrew Nagorny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проблема в том что висит как раз на запросе... т.е. программа ждет завершения запроса. Т.е. тут никакие callback и события не помогут.

liveness timeout - я уже пробовал. запускал dbsrv c ключом -tl 5... т.е. 5 секунд. не помогло((
...
Рейтинг: 0 / 0
зависает запрос к ASA 9 с Pocket PC
    #35317989
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrew NagornyПроблема в том что висит как раз на запросе... т.е. программа ждет завершения запроса. Т.е. тут никакие callback и события не помогут.

liveness timeout - я уже пробовал. запускал dbsrv c ключом -tl 5... т.е. 5 секунд. не помогло((Ты не понял сути процесса. У тебя не сервер должен связь рубить если клиент ничего не делает. А клиент должен понимать что связь пропала. А это можно сделать только двумя способами, либо раз в цать секунд посылать пустой запрос на сервер, либо попросить драйвер извещать тебя о пропаже связи. Первое годится для периода клиентского ничего не делания, а второй - отловить пропажу связи во время ожидания ответа на запрос.
...
Рейтинг: 0 / 0
зависает запрос к ASA 9 с Pocket PC
    #35319810
Andrew Nagorny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White Owl Andrew NagornyПроблема в том что висит как раз на запросе... т.е. программа ждет завершения запроса. Т.е. тут никакие callback и события не помогут.

liveness timeout - я уже пробовал. запускал dbsrv c ключом -tl 5... т.е. 5 секунд. не помогло((Ты не понял сути процесса. У тебя не сервер должен связь рубить если клиент ничего не делает. А клиент должен понимать что связь пропала. А это можно сделать только двумя способами, либо раз в цать секунд посылать пустой запрос на сервер, либо попросить драйвер извещать тебя о пропаже связи. Первое годится для периода клиентского ничего не делания, а второй - отловить пропажу связи во время ожидания ответа на запрос.

Для первого мне придется открывать вторую нитку...так как основная висит на запросе. Что не хотелось бы делать...

А на счет второго как раз я и спрашиваю...но похоже никто не знает. (
...
Рейтинг: 0 / 0
зависает запрос к ASA 9 с Pocket PC
    #35319812
Andrew Nagorny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ключ tl вроде должен работать и на клиента.
...
Рейтинг: 0 / 0
зависает запрос к ASA 9 с Pocket PC
    #35321611
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrew NagornyА на счет второго как раз я и спрашиваю...но похоже никто не знает. (Читай мой первый ответ в этом топике.

Andrew Nagornyключ tl вроде должен работать и на клиента.Нет, не должен. Еще раз повторяю - этот ключ рубит связь со стороны сервера если клиент долгое время ничего не делал. Если от клиента не идут запросы - сервер его выгоняет. Долго-работающий запрос не является "клиент ничего не делает". Поэтому данный таймаут и не срабатывает.
А даже если и сработает - клиент не узнает что связь пропала пока не попытается выполнить новый запрос или если он не слушает сообщения от своего драйвера.
...
Рейтинг: 0 / 0
зависает запрос к ASA 9 с Pocket PC
    #35322174
Andrew Nagorny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White Owl Andrew NagornyА на счет второго как раз я и спрашиваю...но похоже никто не знает. (Читай мой первый ответ в этом топике.

Andrew Nagornyключ tl вроде должен работать и на клиента.Нет, не должен. Еще раз повторяю - этот ключ рубит связь со стороны сервера если клиент долгое время ничего не делал. Если от клиента не идут запросы - сервер его выгоняет. Долго-работающий запрос не является "клиент ничего не делает". Поэтому данный таймаут и не срабатывает.
А даже если и сработает - клиент не узнает что связь пропала пока не попытается выполнить новый запрос или если он не слушает сообщения от своего драйвера.

Не вижу метода как можно использовать callback... приложение висит на запросе. поэтому callback в основной нитке не будет отрабатываться. если callback направить на вторую нитку, то это ничего не даст так как я ничего не смогу сделать с основной ниткой. не килять же ее...

по поводу ключа tl... по доке сервер посылает пакеты на клиента для проверки что он живой. про то что клиент что то там долго долго не делал в доке ничего нет.

Все ведет к тому что решить данную ситуацию может только сам драйвер. Т.е. именно он должен обнаруживать разрыв соединения и сообщать клиенту.

нашел параметр соединения LTO (LivenessTimeout connection parameter)... попробую его заюзать.
...
Рейтинг: 0 / 0
зависает запрос к ASA 9 с Pocket PC
    #35322640
iLLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-tl:
Устанавливает LivenessTimeout со стороны клиента или сервера. Пакеты
посылаются с этим временным интервалом для установления факта присутствия
коннекта.
Читать внимательно документацию и экспериментировать. По поводу таймаута,
вполне может быть, что требуется доп.настройка на уровне TCPIP, ведь драйвер
работает поверх него и, следовательно, никакими методами низкоуровневую
работу уже не выполнить.
-ti:
Это параметр работает только со стороны сервера. Указывает сколько минут
может бездействовать (не выполнять запросов) коннект.

Это разные по сути параметры.

P.S.: Возможно стоит посмотреть в сторону выполнения запросов ассинхронно.
Как в isql.


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
зависает запрос к ASA 9 с Pocket PC
    #35322849
Andrew Nagorny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я как раз tl и пробовал...
если не получиться с LTO, то посмотрю асинхронную работу. Спасибо.
...
Рейтинг: 0 / 0
зависает запрос к ASA 9 с Pocket PC
    #35324163
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrew NagornyНе вижу метода как можно использовать callback... приложение висит на запросе. поэтому callback в основной нитке не будет отрабатываться.Будет. Почитай что такое callback . Не нужно никаких вторых ниток. Колбеки для того и придуманы чтобы основной процесс запустив долгоиграющую библиотечную функцию иногда отвлекался от ожидания и сообщал юзеру о состоянии этой самой долгоиграющей библиотечной функции.


Andrew NagornyВсе ведет к тому что решить данную ситуацию может только сам драйвер. Т.е. именно он должен обнаруживать разрыв соединения и сообщать клиенту.Да. Читай мой первый пост в топике :)

Andrew Nagornyнашел параметр соединения LTO (LivenessTimeout connection parameter)... попробую его заюзать.Это не годится. LTO будет проверять живой коннект или нет. Оно действительно отследит потерю физической связи между сервером и клиентским драйвером.
Но ты не драйвер пишешь, а клиентское приложение... А драйвер сообщит клиентскому приложению о потере связи только в двух случаях: либо ты попытаешься сделать новый запрос, либо ты закажешь драйверу дергать твой колбек при потере связи.
А так как у тебя клиент на PB пишется, а у него большие сложности с колбеками (вернее полная невозможность их делать из за компиляции в P-код) - прийдется писать внешнюю dll. И я уже показал как именно. Читай мой первый пост в топике.
...
Рейтинг: 0 / 0
зависает запрос к ASA 9 с Pocket PC
    #35324939
Andrew Nagorny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
хм... если уже ничего не останется, то может быть и попробую callback. пока хотся обойтись простыми методами)
...
Рейтинг: 0 / 0
зависает запрос к ASA 9 с Pocket PC
    #35326265
Andrew Nagorny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LTO помог... зависон с 2-5 минут сократился до 40 секунд. это уже большой прогресс)

LTO установил в 30 секунд.

когда пробовал ставить таймаут меньше 30 сек....смотрел в свойствах коннекшина там стояло 30.
т.е.
LTO < 30 в коннекшине 30
LTO >= 30 в коннекшине установленное значение.

В доке по поводу ограничения нет никакой информации.
Никто не в курсе этого ограничения?

PS
хотелось бы в принципе уменьшить зависон еще больше...)
...
Рейтинг: 0 / 0
зависает запрос к ASA 9 с Pocket PC
    #35327416
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrew Nagornyкогда пробовал ставить таймаут меньше 30 сек....смотрел в свойствах коннекшина там стояло 30.
т.е.
LTO < 30 в коннекшине 30
LTO >= 30 в коннекшине установленное значение.

В доке по поводу ограничения нет никакой информации.
Никто не в курсе этого ограничения?Как это нет? Все там есть.
LivenessTimeout connection parameter LTO The minimum value for the LivenessTimeout connection parameter is 30 seconds, and the maximum value is 32767 seconds. If you specify 0, liveness timeout checking is turned off for the connection. Any non-zero value less than the minimum value is reset to the minimum value. For example, a connection string containing "LivenessTimeout=5" uses "LivenessTimeout=30".
...
Рейтинг: 0 / 0
зависает запрос к ASA 9 с Pocket PC
    #35327563
Andrew Nagorny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
видимо куда то ни туда смотрел) спасибо!
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / зависает запрос к ASA 9 с Pocket PC
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]