Russian Qt Forum
Ноябрь 23, 2024, 01:29
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Работа с сетью
>
Выбор протокола для обмена данными
Страниц: [
1
]
2
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Выбор протокола для обмена данными (Прочитано 11884 раз)
Yegor
Гость
Выбор протокола для обмена данными
«
:
Май 02, 2016, 12:10 »
Здравствуйте всем!
Использую Qt самую свежую. У меня есть задача - чтобы установить соединение между клиентом и сервером (по интернету, с помощью OpenVPN).
И чтобы по этому соединению передавать разнородные данные, трех видов:
авторизация клиента при подключении его к серверу
передача файлов
передача просто определенных байтов данных
Нужно уметь отделять эти данные друг от друга, знать где какой тип, чтобы они не смешивались.
Посоветуйте, пожалуйста, какой протокол соединения лучше для этого использовать? Может HTTP?
Записан
Old
Джедай : наставник для всех
Offline
Сообщений: 4350
Re: Выбор протокола для обмена данными
«
Ответ #1 :
Май 02, 2016, 12:13 »
Если мы говорим про интернет и нужна гарантированная доставка данных, то только tcp и остается.
Записан
qate
Супер
Offline
Сообщений: 1177
Re: Выбор протокола для обмена данными
«
Ответ #2 :
Май 02, 2016, 23:16 »
нужно написать клиент и\или сервер ?
Записан
nwnclv
Гость
Re: Выбор протокола для обмена данными
«
Ответ #3 :
Май 04, 2016, 01:41 »
Возьми любую либу, реализующую RPC. Поверх TCP, да
Записан
Yegor
Гость
Re: Выбор протокола для обмена данными
«
Ответ #4 :
Май 12, 2016, 20:46 »
Цитировать
нужно написать клиент и\или сервер
Да, обмен между клиентом и сервером. Причем клиент должен авторизоваться (логин, пароль) при подключении.
Цитировать
Возьми любую либу, реализующую RPC. Поверх TCP, да
А что такое RPC? Это например SOAP или REST?
Записан
PimenS
Крякер
Offline
Сообщений: 371
Re: Выбор протокола для обмена данными
«
Ответ #5 :
Май 12, 2016, 21:05 »
Из примеров:
Fortune Server Example
Fortune Client Example
чем не подходят?
Записан
Yegor
Гость
Re: Выбор протокола для обмена данными
«
Ответ #6 :
Май 13, 2016, 17:17 »
В примерах используются Tcp сокеты.
А класс
QNetworkAccessManager
для чего он? В каких случаях используется?
Подойдет ли использование
QNetworkAccessManager
для обмена между клиентом и сервером?
«
Последнее редактирование: Май 13, 2016, 17:48 от Yegor
»
Записан
PimenS
Крякер
Offline
Сообщений: 371
Re: Выбор протокола для обмена данными
«
Ответ #7 :
Май 13, 2016, 18:55 »
Вам нужно:
1. обмен между клиентом и сервером
или
2. отправка запроса серверу и получение ответа
?
Записан
Yegor
Гость
Re: Выбор протокола для обмена данными
«
Ответ #8 :
Май 13, 2016, 19:24 »
Нужен обмен между клиентом и сервером. Интересуют передовые удобные технологи для этой задачи.
«
Последнее редактирование: Май 13, 2016, 19:27 от Yegor
»
Записан
Old
Джедай : наставник для всех
Offline
Сообщений: 4350
Re: Выбор протокола для обмена данными
«
Ответ #9 :
Май 13, 2016, 19:25 »
Цитата: PimenS от Май 13, 2016, 18:55
Вам нужно:
1. обмен между клиентом и сервером
или
2. отправка запроса серверу и получение ответа
?
А в чем разница?
Записан
nwnclv
Гость
Re: Выбор протокола для обмена данными
«
Ответ #10 :
Май 13, 2016, 21:45 »
Цитата: Yegor от Май 13, 2016, 19:24
Нужен обмен между клиентом и сервером. Интересуют передовые удобные технологи для этой задачи.
Что значит передовые? передовые для чего? Удобство тоже субъективная чтука, которая и от опыта зависит.
а про RPC ... да их тысячи, либ-то, thrift, grpc. А уж по названию "Qt RPC", так еще больше выдается
Я вообще свою писал, для управления железками типа raspberri
Так что выбирай какой нравится.
Записан
PimenS
Крякер
Offline
Сообщений: 371
Re: Выбор протокола для обмена данными
«
Ответ #11 :
Май 13, 2016, 23:35 »
Цитата: Old от Май 13, 2016, 19:25
А в чем разница?
Понятно, что в обоих случаях происходит обмен.
В первом случае, я имел ввиду, ситуацию, когда не только клиент может отправлять запрос серверу, но и сам сервер может инициировать передачу данных клиенту.
Во втором же случае, классический вариант клиент-сервера. Когда клиент только спрашивает, сервер только отвечает на запросы.
Записан
ssoft
Программист
Offline
Сообщений: 584
Re: Выбор протокола для обмена данными
«
Ответ #12 :
Май 14, 2016, 07:38 »
Для понимания задачи необходимо провести декомпозицию
1. Есть желание организовать между компонентами системы взаимодействие по технологии клиент-сервер. Это определенная технология, которая подразумевает разделение логики на серверную и клиентские части. Кто что делает решает программист (аналитик).
2. Существует разные варианты организации обмена сообщениями между компонентами ПО (через файлы, TCP, UDP, РShared memory и т.п.). Среди прочих механизмов есть, например, QTcpServer & QTcpSocket из библиотеки Qt.
3. Для общения клиента и сервера необходим протокол взаимодействия, который определяется конкретной задачей и непосредственно разработчиком. Протокол может быть бинарным, текстовым (XML, JSON и т.п.).
Если для задачи существует общепринятый протокол взаимодействия (http, ftp и т.п. ), то можно взять его.
Однако, в подавляющем большинстве случаев, протокол общения свой собственный, так как определяется спецификой конкретной задачи.
На случай взаимодействия по готовым протоколам (http, ftp и др.) существуют готовые решения типа QNetworkAccessManager, однако они предполагают наличие определенного вида сервера, с которым происходит взаимодействие. Если требуется взаимодействие в виде запрос-ответ, то протокол http может подойти.
Если север и клиент ваш собственный и задача специфическая, то протокол и способ взаимодействия вам придется реализовывать самостоятельно.
Записан
yodu
Гость
Re: Выбор протокола для обмена данными
«
Ответ #13 :
Май 18, 2016, 11:28 »
Приветствую, товарищи!
Хотел подобную тему поднять, но раз уже тут есть, напишу сюда. Сейчас мы хотим разделить один проект на 2 части (клиент/сервер). Проект Qt и довольно крупный. И вот встал вопрос о выборе библиотеки, которая позволит:
легко описывать вызовы, которые нужно делать удаленно (мне в этом плане нравится формат thrift'a и protobufer'a)
поддержка tcp и пайпов
проводить имперсонацию клиента (в случае windows и работы серверной части как сервиса под LOCAL_SYSTEM)
равноправный клиент и сервер; чтобы сервер мог слать клиентам события/сигналы, делать вызовы на стороне клиентов
возможность работать по ssl
...
А, да. библиотка не обязательно на Qt должна быть. потому как клиенты будут еще и для маков/андроидов/винфонов и там не Qt.
Я сейчас эту тема сам раскапываю, но вдруг кто опыт имеет и может ткнуть носом в подходящее. Потому как пока я все пересмотрю время пройдет немалое.
Спасибо.
Записан
nwnclv
Гость
Re: Выбор протокола для обмена данными
«
Ответ #14 :
Май 18, 2016, 23:26 »
Цитата: yodu от Май 18, 2016, 11:28
легко описывать вызовы, которые нужно делать удаленно (мне в этом плане нравится формат thrift'a и protobufer'a)
Так и бери один из них. В случае протобуфера тебе придется нарисовать свой транспорт. А там уже хоть на Qt, хоть на либевент. В случае трифта вообще уже все готово
Цитата: yodu от Май 18, 2016, 11:28
поддержка tcp и пайпов
проводить имперсонацию клиента (в случае windows и работы серверной части как сервиса под LOCAL_SYSTEM)
для трифта есть реализация транспорта named pipe, к хендлу для имперсонации доступ плучить можно. Для протобуфера см. выше
Цитата: yodu от Май 18, 2016, 11:28
равноправный клиент и сервер; чтобы сервер мог слать клиентам события/сигналы, делать вызовы на стороне клиентов
для PB опять же будет зависеть от того, как сделаешь обмен сообщениями, для трифта вроде из коробки можно.
Цитата: yodu от Май 18, 2016, 11:28
возможность работать по ssl
вот для трифта про это не вкурсе. для протобуфера ... ну как обычно. как напишешь.
Помимо этих двух, я тут еще упоминал
grpc
, про его возможности/невозможности я не знаю ничего.
Если будет сильно интересно, можешь еще мой велосипед на С++, Boost и Protobuf посмотреть
либа
,
некоторе корявенькое описание
,
примеры
вдруг, что интересное оттуда почерпнешь.
«
Последнее редактирование: Май 18, 2016, 23:53 от nwnclv
»
Записан
Страниц: [
1
]
2
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...