Connect online (синхронизация данных)

CWICWEB, ClarioNET и пр.

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
gopstop2007
✯ Ветеран ✯
Сообщения: 1702
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 9 раз
Поблагодарили: 4 раза

Connect online (синхронизация данных)

Сообщение gopstop2007 »

На локальном компьютере находится программа - с таблицей списка товара ( prod.tps ), которая коннектится к онлайн серверу.
Клиент перемещается по списку с товаром и если локальные данные не соответствуют с данными на онлайн сервере, то данные переписываются на онлайн сервер.
Простая проверка наличия записи на сервере

Код: Выделить всё

serv_id = myid
GET(Myfile,serv_idkey)
IF ERRORCODE()
    !добавить запись
ELSE
    ! изменить запись
END
Когда есть связь с онлайн сервером, то проблем перемещения по списку товара нет, но если произошел сбой (обрыв коннекта (дисконнект)) в процессе работы то "можно слона родить" при перемещении по списку в таблице ожидая отклика от сервера. Вопрос как получить "быстрый отклик" на GET (или какой другой оператор), что связи с онлайн сервером нет(или опять есть) и по тихому продолжить дальше работать со списком товара без заметных тормозов?
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
Аватара пользователя
Admin
Администратор
Сообщения: 3959
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 25 раз
Поблагодарили: 22 раза
Контактная информация:

Connect online

Сообщение Admin »

Каким образом происходит обмен данными с сервером?
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

Connect online

Сообщение kreator »

Я проверяю функцией share, типа вот так:

Код: Выделить всё

      share(ZZZ)
      if ~errorcode()
         ! Синхронизируем с сервером
      end   
, где ZZZ - таблица на сервере. Share не выкидывает сообщений об ошибках. Чем и хороша. В отличии от ABC классов. Хотя наверно неправ, есть tryopen.
И ещё замечание. Проверку делаю не для каждой синхронизируемой записи, а в начале. Считаю, что синхронизация идёт достаточно быстро и связь не оборвётся в процессе.
We are hard at work… for you. :)
gopstop2007
✯ Ветеран ✯
Сообщения: 1702
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 9 раз
Поблагодарили: 4 раза

Connect online

Сообщение gopstop2007 »

Admin писал(а): 15 Июль 2017, 15:30 Каким образом происходит обмен данными с сервером?
Clarion10 ABC
Соединение клиента с базой на сервере через Mysql ODBC 5.6
Само по себе соединение с сервером не критично, так как клиент работает локально, но данные на сервере нужно если есть возможность обновлять.
Проблема не с сервером, а с качеством сетевого соединения между сервером и клиентом. Варианты причин обрыва соединений с сервером, моргнул свет в помещении где находится роутер или сервер mysql :) Частая причина пропадание инета при работе ноутбуке через Wi-fi.
Та же установка timeout на сервере ничего не решает, так как проблема на стороне клиента :(
Проблему можно с имитировать простым выдергиванием витой пары сетевого шнура. :)
Хотелось бы видеть решение проблемы на стороне клиента как при простом пинге сервера, при обрыве соединения сразу видно дисконнект, а не зависнуть на ~10 секунд :)
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
gopstop2007
✯ Ветеран ✯
Сообщения: 1702
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 9 раз
Поблагодарили: 4 раза

Connect online

Сообщение gopstop2007 »

kreator писал(а): 15 Июль 2017, 15:55 Проверку делаю не для каждой синхронизируемой записи, а в начале. Считаю, что синхронизация идёт достаточно быстро и связь не оборвётся в процессе.
В начале как раз не получается, так как при перемещении по списку товаров каждая запись в списке товара, если отличается от записи на сервере - перезаписывается.
Сам процесс работы выглядит так, окно со списком товаров (1-10 тысяч записей), по которому пользователь перемещается по записям выбирая нужный товар с остатком. При простом перемещении по товару сверяется остаток выбранного товара с остатком на сервере, при не совпадении записей , остаток на сервере переписывается.
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

Connect online

Сообщение kreator »

gopstop2007 писал(а): 15 Июль 2017, 16:24 В начале как раз не получается, так как при перемещении по списку товаров каждая запись в списке товара, если отличается от записи на сервере - перезаписывается.
Ну делай такую проверку для каждой записи. Ведь необязательно пытаться открыть таблицу, которую синхронизируешь. Любую другую можно. Можно организовать в таймере по одной записи.
А вообще может синхронизироваться на сервере через текстовый или xml файл?
We are hard at work… for you. :)
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3131
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

Connect online

Сообщение Дед Пахом »

kreator писал(а): 15 Июль 2017, 17:25А вообще может синхронизироваться на сервере через текстовый или xml файл?
Самое разумное.
С уважением, ДП
gopstop2007
✯ Ветеран ✯
Сообщения: 1702
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 9 раз
Поблагодарили: 4 раза

Connect online

Сообщение gopstop2007 »

Судя по всему нужно будет создавать файл ostat_temp.tps в который записывать не совпадающие записи а-ля лог. И создать приложение отдельное от основного, так как если все это сделать в том же приложении, зависания останутся. А так прошелся пользователь по записям товара вышел из окна или какое другое действие например по таймеру - обновить. Запускается отдельное приложение ААА которое и отправляет записи из файла ostat_temp.tps на сервер, пусть даже и зависнет (что не повлияет я надеюсь на работу основного приложения) или вылетит :) Очередной запуск по таймеру ААА отправит все оставшиеся записи до конца и завершит работу ААА приложения.
Осталось решить делать ААА как простое приложение или как службу?
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

Connect online

Сообщение kreator »

gopstop2007 писал(а): 15 Июль 2017, 18:36 Осталось решить делать ААА как простое приложение или как службу?
Проще - обычное приложение и в автозагрузку. Проверяет наличие нужного файла (пусть даже tps) - появился, делает синхронизацию, файл удаляет.
We are hard at work… for you. :)
gopstop2007
✯ Ветеран ✯
Сообщения: 1702
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 9 раз
Поблагодарили: 4 раза

Connect online

Сообщение gopstop2007 »

kreator писал(а): 15 Июль 2017, 20:10 Проще - обычное приложение и в автозагрузку. Проверяет наличие нужного файла (пусть даже tps) - появился, делает синхронизацию, файл удаляет.
Нет не удаляет, как как в этот момент может идти параллельная запись в него данных из основной программы :)
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4562
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Connect online

Сообщение finsoftrz »

gopstop2007 писал(а): 15 Июль 2017, 18:36Судя по всему нужно будет создавать файл ostat_temp.tps в который записывать не совпадающие записи а-ля лог. И создать приложение отдельное от основного, так как если все это сделать в том же приложении, зависания останутся. А так прошелся пользователь по записям товара вышел из окна или какое другое действие например по таймеру - обновить. Запускается отдельное приложение ААА которое и отправляет записи из файла ostat_temp.tps на сервер, пусть даже и зависнет (что не повлияет я надеюсь на работу основного приложения) или вылетит :) Очередной запуск по таймеру ААА отправит все оставшиеся записи до конца и завершит работу ААА приложения.
Осталось решить делать ААА как простое приложение или как службу?
А еще дополнительно третье приложение, которое следит, не зависло/отвалилось ли второе, чтобы автоматически его снять и перезапустить...
C6/C11, ШВС, tps/btrieve.
gopstop2007
✯ Ветеран ✯
Сообщения: 1702
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 9 раз
Поблагодарили: 4 раза

Connect online

Сообщение gopstop2007 »

finsoftrz писал(а): 16 Июль 2017, 9:56 А еще дополнительно третье приложение, которое следит, не зависло/отвалилось ли второе, чтобы автоматически его снять и перезапустить...
Серьезно, третье? А какие проблемы могут возникнуть, если основное за этим проследит ?
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1376
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 7 раз
Поблагодарили: 1 раз
Контактная информация:

Connect online

Сообщение RaFaeL »

Так а может перед каждым GET проверять, не пропало ли соединение?
Аватара пользователя
Admin
Администратор
Сообщения: 3959
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 25 раз
Поблагодарили: 22 раза
Контактная информация:

Connect online

Сообщение Admin »

RaFaeL писал(а): 16 Июль 2017, 10:30Так а может перед каждым GET проверять, не пропало ли соединение?
На то оно и соединение... что ты проверил и оно тут же пропало :)
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Аватара пользователя
Admin
Администратор
Сообщения: 3959
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 25 раз
Поблагодарили: 22 раза
Контактная информация:

Connect online

Сообщение Admin »

Кстати а отдельным тредом нельзя обойтись? Все равно будет виснуть?
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Ответить