Russian Qt Forum

Qt => Работа с сетью => Тема начата: crocus от Февраль 15, 2007, 02:26



Название: Локальная программа + удаленный сервер - Современный подход
Отправлено: crocus от Февраль 15, 2007, 02:26
Собственно вопрос о современных методах обмена данными между удаленным сервером и локальной программой, например -  я использую в своей программе базу данных MySQL, информация перемещается туда-обратно, поскольку сервер виртуальный и прямого доступа к базе нет (туннели использовать неохота. потому что никогда не использовал) -выгружаю данные в файл - сжимаю -закачиваю на сервер - распаковываю - читаю файл (LOAD DATA INFILE не поддерживается)- обновляю базу сервера, ну и наоборот. Этой схеме не один год, но может кто придумал что-то  более прогрессивное, а то слишком много кода в том числе и на PHP.

В общем предлагаю пофлудить! :wink:


Название: Локальная программа + удаленный сервер - Современный подход
Отправлено: Tonal от Февраль 15, 2007, 09:13
HTTP не пробывал? ;-)


Название: Локальная программа + удаленный сервер - Современный подход
Отправлено: crocus от Февраль 15, 2007, 10:20
Цитата: "Tonal"
HTTP не пробывал? ;-)

Шутка удалась!!
Понятно что на стороне сервера необходимые операции выполняются средствами PHP, а на стороне локальной - в программе, прозрачно для пользователя средствами Qt используя HTTP - GET, POST, Request и FTP.


Название: Локальная программа + удаленный сервер - Современный подход
Отправлено: Tonal от Февраль 15, 2007, 10:51
Ну и что мешает использовать HTTP - GET, POST для передачи этих данных серверу?
Чем сжатый файл по FTP лучше?


Название: Локальная программа + удаленный сервер - Современный подход
Отправлено: crocus от Февраль 19, 2007, 11:01
Тщеславия ради.
Додумал как лучше обновлять локальную базу MySQl с сервера.
Есть такой запрос "SHOW TABLE STATUS"- его результаты (интересует Name и Update_time) записываем в файл->сжимаем-скачиваем-> распаковываем - сравниваем с датой из settings -> и если таблицу надо обновлять снова шлем запрос на сервер -> записываем в файл-> запаковываем -скачиваем ...->обновляем таблицу - записываем новую дату в settings.
Если кому интересно, могу более подробно, с примерами, хотя смысл и так понятен.

На SQL.ru было упоминание о системе обмена документами EDI - кто-нибудь слышал что это такое и c чем его едят :)
http://www.citforum.ru/internet/articles/xmledi.shtml


Название: Локальная программа + удаленный сервер - Современный подход
Отправлено: Tonal от Февраль 19, 2007, 18:00
Этож сколько у тебя таблиц, что табличку из 2х колонок надобно сжимать?
И если уж данных такая прорва, то чем родное http сжатье (gzip, deflate) не устраивает?

Да, сдаётся мне, что описанная схема обмена может глючить при одновременных обращениях...


Название: Локальная программа + удаленный сервер - Современный подход
Отправлено: crocus от Февраль 20, 2007, 01:23
Все шутишь :)
Цитировать
чем родное http сжатье (gzip, deflate) не устраивает?

Исторически так сложилось, потому-что литературы было мало, и кроме того описанные методы работают преимущественно со строками, а мне было удобнее и понятнее с файлами. Например, до сих пор не понимаю как в архив (CLXXXII. Функции сжатия Zlib) добавить файл.

Вопрос:  как отправить  запрос на сервер мне понятно, а вот как получить его результаты в программу использую "родное http сжатье" совсем нет - пояснишь??
Цитата: "Tonal"
описанная схема обмена может глючить при одновременных обращениях...

Я думал об этом, имя архива и файлов таблиц генерируются из : имя файла/таблицы + идентификатор пользователя-получается уникально и глючить не должно, важно не забывать мусор подчищать, а то даже при  100  пользователях хламу будет .... 100х .

У тебя случайно нет телефонного справочника Новосибирска, хотел знакомых поискать.


Название: Локальная программа + удаленный сервер - Современный подход
Отправлено: Tonal от Февраль 21, 2007, 14:52
Вот код на python-е который принимает gzip-нутый ответ сервера:
Код:

  req = urllib2.Request(url)
  req.add_header('Accept-encoding', 'gzip')
  page = urllib2.urlopen(url)
  data = page.read()
  if page.headers.get('content-encoding', '') != 'gzip':
    return data
  else:
    compressedstream = StringIO.StringIO(data)
    gzipper = gzip.GzipFile(fileobj=compressedstream)
    return gzipper.read()

Вроде всё прозрачно.
А документация в достаточном количестве по ключевым словам mod_gzip, mod_deflate.


Название: Локальная программа + удаленный сервер - Современный подход
Отправлено: Admin от Февраль 21, 2007, 17:18
способов несколько
1. открыть mysql сокет и работать с базой напрямую
2. прослойка apache+php+mysql на серверу
3. mysql позволяет бинарные логи писать их можно по ftp сувать
4. писать самому протокол общения типа на CORBA


Название: Локальная программа + удаленный сервер - Современный подход
Отправлено: zabivator от Февраль 21, 2007, 18:01
DBUS?


Название: Локальная программа + удаленный сервер - Современный подход
Отправлено: TukiNov от Февраль 21, 2007, 20:42
Цитата: "Admin"
способов несколько
1. открыть mysql сокет и работать с базой напрямую
2. прослойка apache+php+mysql на серверу
3. mysql позволяет бинарные логи писать их можно по ftp сувать
4. писать самому протокол общения типа на CORBA

можно про второй пункт подробнее ? :)
а то у меня тоже оракл на серваке, а прямого ип-адреса нет.


Название: Локальная программа + удаленный сервер - Современный подход
Отправлено: Admin от Февраль 23, 2007, 20:00
про второе - уже тебе предлагали общение по HTTP протоколу