|
|
|
зависает запрос к ASA 9 с Pocket PC
|
|||
|---|---|---|---|
|
#18+
вопрос к профессионалам. У меня написано приложение на PowerBuilder для PocketPC. сервер (ASA 9) находится на обычном компьютере. Покет через WiFi подключается к серверу. И вот такая вот проблема: Когда устойчивая связь, запускается запрос к базе данных. Запрос еще не завершен, но связь пропадает (зашли например в какое нибудь место где не ловится сетка), и программа висит на запросе больше 3 минут. Что нужно сделать что бы сократить время такого зависона? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2008, 12:40 |
|
||
|
зависает запрос к ASA 9 с Pocket PC
|
|||
|---|---|---|---|
|
#18+
В 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2008, 17:46 |
|
||
|
зависает запрос к ASA 9 с Pocket PC
|
|||
|---|---|---|---|
|
#18+
A "liveness timeout" не поможет? По умолчанию, он вроде 120 секунд стоит. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2008, 22:16 |
|
||
|
зависает запрос к ASA 9 с Pocket PC
|
|||
|---|---|---|---|
|
#18+
Проблема в том что висит как раз на запросе... т.е. программа ждет завершения запроса. Т.е. тут никакие callback и события не помогут. liveness timeout - я уже пробовал. запускал dbsrv c ключом -tl 5... т.е. 5 секунд. не помогло(( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2008, 08:19 |
|
||
|
зависает запрос к ASA 9 с Pocket PC
|
|||
|---|---|---|---|
|
#18+
Andrew NagornyПроблема в том что висит как раз на запросе... т.е. программа ждет завершения запроса. Т.е. тут никакие callback и события не помогут. liveness timeout - я уже пробовал. запускал dbsrv c ключом -tl 5... т.е. 5 секунд. не помогло((Ты не понял сути процесса. У тебя не сервер должен связь рубить если клиент ничего не делает. А клиент должен понимать что связь пропала. А это можно сделать только двумя способами, либо раз в цать секунд посылать пустой запрос на сервер, либо попросить драйвер извещать тебя о пропаже связи. Первое годится для периода клиентского ничего не делания, а второй - отловить пропажу связи во время ожидания ответа на запрос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2008, 17:34 |
|
||
|
зависает запрос к ASA 9 с Pocket PC
|
|||
|---|---|---|---|
|
#18+
White Owl Andrew NagornyПроблема в том что висит как раз на запросе... т.е. программа ждет завершения запроса. Т.е. тут никакие callback и события не помогут. liveness timeout - я уже пробовал. запускал dbsrv c ключом -tl 5... т.е. 5 секунд. не помогло((Ты не понял сути процесса. У тебя не сервер должен связь рубить если клиент ничего не делает. А клиент должен понимать что связь пропала. А это можно сделать только двумя способами, либо раз в цать секунд посылать пустой запрос на сервер, либо попросить драйвер извещать тебя о пропаже связи. Первое годится для периода клиентского ничего не делания, а второй - отловить пропажу связи во время ожидания ответа на запрос. Для первого мне придется открывать вторую нитку...так как основная висит на запросе. Что не хотелось бы делать... А на счет второго как раз я и спрашиваю...но похоже никто не знает. ( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2008, 08:26 |
|
||
|
зависает запрос к ASA 9 с Pocket PC
|
|||
|---|---|---|---|
|
#18+
ключ tl вроде должен работать и на клиента. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2008, 08:27 |
|
||
|
зависает запрос к ASA 9 с Pocket PC
|
|||
|---|---|---|---|
|
#18+
Andrew NagornyА на счет второго как раз я и спрашиваю...но похоже никто не знает. (Читай мой первый ответ в этом топике. Andrew Nagornyключ tl вроде должен работать и на клиента.Нет, не должен. Еще раз повторяю - этот ключ рубит связь со стороны сервера если клиент долгое время ничего не делал. Если от клиента не идут запросы - сервер его выгоняет. Долго-работающий запрос не является "клиент ничего не делает". Поэтому данный таймаут и не срабатывает. А даже если и сработает - клиент не узнает что связь пропала пока не попытается выполнить новый запрос или если он не слушает сообщения от своего драйвера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2008, 17:58 |
|
||
|
зависает запрос к ASA 9 с Pocket PC
|
|||
|---|---|---|---|
|
#18+
White Owl Andrew NagornyА на счет второго как раз я и спрашиваю...но похоже никто не знает. (Читай мой первый ответ в этом топике. Andrew Nagornyключ tl вроде должен работать и на клиента.Нет, не должен. Еще раз повторяю - этот ключ рубит связь со стороны сервера если клиент долгое время ничего не делал. Если от клиента не идут запросы - сервер его выгоняет. Долго-работающий запрос не является "клиент ничего не делает". Поэтому данный таймаут и не срабатывает. А даже если и сработает - клиент не узнает что связь пропала пока не попытается выполнить новый запрос или если он не слушает сообщения от своего драйвера. Не вижу метода как можно использовать callback... приложение висит на запросе. поэтому callback в основной нитке не будет отрабатываться. если callback направить на вторую нитку, то это ничего не даст так как я ничего не смогу сделать с основной ниткой. не килять же ее... по поводу ключа tl... по доке сервер посылает пакеты на клиента для проверки что он живой. про то что клиент что то там долго долго не делал в доке ничего нет. Все ведет к тому что решить данную ситуацию может только сам драйвер. Т.е. именно он должен обнаруживать разрыв соединения и сообщать клиенту. нашел параметр соединения LTO (LivenessTimeout connection parameter)... попробую его заюзать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2008, 08:27 |
|
||
|
зависает запрос к ASA 9 с Pocket PC
|
|||
|---|---|---|---|
|
#18+
-tl: Устанавливает LivenessTimeout со стороны клиента или сервера. Пакеты посылаются с этим временным интервалом для установления факта присутствия коннекта. Читать внимательно документацию и экспериментировать. По поводу таймаута, вполне может быть, что требуется доп.настройка на уровне TCPIP, ведь драйвер работает поверх него и, следовательно, никакими методами низкоуровневую работу уже не выполнить. -ti: Это параметр работает только со стороны сервера. Указывает сколько минут может бездействовать (не выполнять запросов) коннект. Это разные по сути параметры. P.S.: Возможно стоит посмотреть в сторону выполнения запросов ассинхронно. Как в isql. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2008, 11:26 |
|
||
|
зависает запрос к ASA 9 с Pocket PC
|
|||
|---|---|---|---|
|
#18+
я как раз tl и пробовал... если не получиться с LTO, то посмотрю асинхронную работу. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2008, 12:13 |
|
||
|
зависает запрос к ASA 9 с Pocket PC
|
|||
|---|---|---|---|
|
#18+
Andrew NagornyНе вижу метода как можно использовать callback... приложение висит на запросе. поэтому callback в основной нитке не будет отрабатываться.Будет. Почитай что такое callback . Не нужно никаких вторых ниток. Колбеки для того и придуманы чтобы основной процесс запустив долгоиграющую библиотечную функцию иногда отвлекался от ожидания и сообщал юзеру о состоянии этой самой долгоиграющей библиотечной функции. Andrew NagornyВсе ведет к тому что решить данную ситуацию может только сам драйвер. Т.е. именно он должен обнаруживать разрыв соединения и сообщать клиенту.Да. Читай мой первый пост в топике :) Andrew Nagornyнашел параметр соединения LTO (LivenessTimeout connection parameter)... попробую его заюзать.Это не годится. LTO будет проверять живой коннект или нет. Оно действительно отследит потерю физической связи между сервером и клиентским драйвером. Но ты не драйвер пишешь, а клиентское приложение... А драйвер сообщит клиентскому приложению о потере связи только в двух случаях: либо ты попытаешься сделать новый запрос, либо ты закажешь драйверу дергать твой колбек при потере связи. А так как у тебя клиент на PB пишется, а у него большие сложности с колбеками (вернее полная невозможность их делать из за компиляции в P-код) - прийдется писать внешнюю dll. И я уже показал как именно. Читай мой первый пост в топике. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2008, 17:55 |
|
||
|
зависает запрос к ASA 9 с Pocket PC
|
|||
|---|---|---|---|
|
#18+
хм... если уже ничего не останется, то может быть и попробую callback. пока хотся обойтись простыми методами) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2008, 08:14 |
|
||
|
зависает запрос к ASA 9 с Pocket PC
|
|||
|---|---|---|---|
|
#18+
LTO помог... зависон с 2-5 минут сократился до 40 секунд. это уже большой прогресс) LTO установил в 30 секунд. когда пробовал ставить таймаут меньше 30 сек....смотрел в свойствах коннекшина там стояло 30. т.е. LTO < 30 в коннекшине 30 LTO >= 30 в коннекшине установленное значение. В доке по поводу ограничения нет никакой информации. Никто не в курсе этого ограничения? PS хотелось бы в принципе уменьшить зависон еще больше...) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2008, 14:52 |
|
||
|
зависает запрос к ASA 9 с Pocket PC
|
|||
|---|---|---|---|
|
#18+
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". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2008, 21:56 |
|
||
|
|

start [/forum/topic.php?fid=55&msg=35321611&tid=2011565]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
408ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
| others: | 239ms |
| total: | 725ms |

| 0 / 0 |
