Russian Qt Forum
Апрель 23, 2024, 19:22 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Выбор протокола для обмена данными  (Прочитано 11325 раз)
Yegor
Гость
« : Май 02, 2016, 12:10 »

Здравствуйте всем!

Использую Qt самую свежую. У меня есть задача - чтобы установить соединение между клиентом и сервером (по интернету, с помощью OpenVPN).
И чтобы по этому соединению передавать разнородные данные, трех видов:
  • авторизация клиента при подключении его к серверу
  • передача файлов
  • передача просто определенных байтов данных

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

Посоветуйте, пожалуйста, какой протокол соединения лучше для этого использовать? Может HTTP?
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4349



Просмотр профиля
« Ответ #1 : Май 02, 2016, 12:13 »

Если мы говорим про интернет и нужна гарантированная доставка данных, то только tcp и остается.
Записан
qate
Супер
******
Offline Offline

Сообщений: 1175


Просмотр профиля
« Ответ #2 : Май 02, 2016, 23:16 »

нужно написать клиент и\или сервер ?
Записан
nwnclv
Гость
« Ответ #3 : Май 04, 2016, 01:41 »

Возьми любую либу, реализующую RPC. Поверх TCP, да
Записан
Yegor
Гость
« Ответ #4 : Май 12, 2016, 20:46 »

Цитировать
нужно написать клиент и\или сервер
Да, обмен между клиентом и сервером. Причем клиент должен авторизоваться (логин, пароль) при подключении.

Цитировать
Возьми любую либу, реализующую RPC. Поверх TCP, да
А что такое RPC? Это например SOAP или REST?
Записан
PimenS
Крякер
****
Offline Offline

Сообщений: 371


Просмотр профиля
« Ответ #5 : Май 12, 2016, 21:05 »

Из примеров:

Fortune Server Example
Fortune Client Example

чем не подходят?
Записан
Yegor
Гость
« Ответ #6 : Май 13, 2016, 17:17 »

В примерах используются Tcp сокеты.

А класс QNetworkAccessManager для чего он? В каких случаях используется?

Подойдет ли использование QNetworkAccessManager для обмена между клиентом и сервером?
« Последнее редактирование: Май 13, 2016, 17:48 от Yegor » Записан
PimenS
Крякер
****
Offline Offline

Сообщений: 371


Просмотр профиля
« Ответ #7 : Май 13, 2016, 18:55 »

Вам нужно:

1. обмен между клиентом и сервером

или

2. отправка запроса серверу и получение ответа

?
Записан
Yegor
Гость
« Ответ #8 : Май 13, 2016, 19:24 »

Нужен обмен между клиентом и сервером. Интересуют передовые удобные технологи для этой задачи.
« Последнее редактирование: Май 13, 2016, 19:27 от Yegor » Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4349



Просмотр профиля
« Ответ #9 : Май 13, 2016, 19:25 »

Вам нужно:

1. обмен между клиентом и сервером

или

2. отправка запроса серверу и получение ответа

?
А в чем разница? Улыбающийся
Записан
nwnclv
Гость
« Ответ #10 : Май 13, 2016, 21:45 »

Нужен обмен между клиентом и сервером. Интересуют передовые удобные технологи для этой задачи.
Что значит передовые? передовые для чего? Удобство тоже субъективная чтука, которая и от опыта зависит.

а про RPC ... да их тысячи, либ-то,  thrift, grpc. А уж по названию "Qt RPC", так еще больше выдается
Я вообще свою писал, для управления железками типа raspberri Улыбающийся Так что выбирай какой нравится.
Записан
PimenS
Крякер
****
Offline Offline

Сообщений: 371


Просмотр профиля
« Ответ #11 : Май 13, 2016, 23:35 »

А в чем разница? Улыбающийся

Понятно, что в обоих случаях происходит обмен.
В первом случае, я имел ввиду, ситуацию, когда не только клиент может отправлять запрос серверу, но и сам сервер может инициировать передачу данных клиенту.
Во втором же случае, классический вариант клиент-сервера. Когда клиент только спрашивает, сервер только отвечает на запросы.
Записан
ssoft
Программист
*****
Offline Offline

Сообщений: 579


Просмотр профиля
« Ответ #12 : Май 14, 2016, 07:38 »

Для понимания задачи необходимо провести декомпозицию

1. Есть желание организовать между компонентами системы взаимодействие по технологии клиент-сервер. Это определенная технология, которая подразумевает разделение логики на серверную и клиентские части. Кто что делает решает программист (аналитик).

2. Существует разные варианты организации обмена сообщениями между компонентами ПО (через файлы, TCP, UDP, РShared memory и т.п.). Среди прочих механизмов есть, например, QTcpServer & QTcpSocket из библиотеки Qt.

3. Для общения клиента и сервера необходим протокол взаимодействия, который определяется конкретной задачей и непосредственно разработчиком. Протокол может быть бинарным, текстовым (XML, JSON и т.п.).

Если для задачи существует общепринятый протокол взаимодействия (http, ftp и т.п. ), то можно взять его.
Однако, в подавляющем большинстве случаев, протокол общения свой собственный, так как определяется спецификой конкретной задачи.

На случай взаимодействия по готовым протоколам (http, ftp и др.) существуют готовые решения типа QNetworkAccessManager, однако они предполагают наличие определенного вида сервера, с которым происходит взаимодействие. Если требуется взаимодействие в виде запрос-ответ, то протокол http может подойти.

Если север и клиент ваш собственный и задача специфическая, то протокол и способ взаимодействия вам придется реализовывать самостоятельно.
Записан
yodu
Гость
« Ответ #13 : Май 18, 2016, 11:28 »

Приветствую, товарищи!

Хотел подобную тему поднять, но раз уже тут есть, напишу сюда. Сейчас мы хотим разделить один проект на 2 части (клиент/сервер). Проект Qt и довольно крупный. И вот встал вопрос о выборе библиотеки, которая позволит:
  • легко описывать вызовы, которые нужно делать удаленно (мне в этом плане нравится формат thrift'a и protobufer'a)
  • поддержка tcp и пайпов
  • проводить имперсонацию клиента (в случае windows и работы серверной части как сервиса под LOCAL_SYSTEM)
  • равноправный клиент и сервер; чтобы сервер мог слать клиентам события/сигналы, делать вызовы на стороне клиентов
  • возможность работать по ssl
  • ...

А, да. библиотка не обязательно на Qt должна быть. потому как клиенты будут еще и для маков/андроидов/винфонов и там не Qt.

Я сейчас эту тема сам раскапываю, но вдруг кто опыт имеет и может ткнуть носом в подходящее. Потому как пока я все пересмотрю время пройдет немалое.

Спасибо.
Записан
nwnclv
Гость
« Ответ #14 : Май 18, 2016, 23:26 »

  • легко описывать вызовы, которые нужно делать удаленно (мне в этом плане нравится формат thrift'a и protobufer'a)
Так и бери один из них. В случае протобуфера тебе придется нарисовать свой транспорт. А там уже хоть на Qt, хоть на либевент. В случае трифта вообще уже все готово
  • поддержка tcp и пайпов
  • проводить имперсонацию клиента (в случае windows и работы серверной части как сервиса под LOCAL_SYSTEM)
для трифта есть реализация транспорта named pipe, к хендлу для имперсонации доступ плучить можно. Для протобуфера см. выше
  • равноправный клиент и сервер; чтобы сервер мог слать клиентам события/сигналы, делать вызовы на стороне клиентов
для PB опять же будет зависеть от того, как сделаешь обмен сообщениями, для трифта вроде из коробки можно.
  • возможность работать по ssl
вот для трифта про это не вкурсе. для протобуфера ... ну как обычно. как напишешь.

Помимо этих двух, я тут еще упоминал grpc, про его возможности/невозможности я не знаю ничего.

Если будет сильно интересно, можешь еще мой велосипед на С++, Boost и Protobuf посмотреть либа, некоторе корявенькое описание, примеры вдруг, что интересное оттуда почерпнешь.
« Последнее редактирование: Май 18, 2016, 23:53 от nwnclv » Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.054 секунд. Запросов: 23.