sbh
@sbh

Как лучше реализовать обмен между клиентом и сервером?

Есть клиент, есть сервер.
Клиент иногда получает задания от сервера и отправляет информацию на сервер.
Как лучше реализовать получение заданий от сервера?
Тупой вариант опроса каждые 10 секунд не подходит.
Думаю, что идеально было бы по аналогии с пуш сообщениями как на мобильных устройствах - сервер шлет информацию клиентам чтобы те обратились за ней.

Кто реализовывал подобные вещи.

Для примера можно взять ситуацию и расписать на ней - в произвольном мессенджере вас добавил кто-то в адресную книгу и вы должны получить уведомление об этом. Клиент - десктопное приложение.
  • Вопрос задан
  • 629 просмотров
Решения вопроса 1
@Phantomouse
Чудес не бывает, и PUSH - это только удобный для использования интерфейс. В его основе лежит как раз таки постоянное соединение клиента с сервером через TCP Socket. Связь устанавливается на всё время, когда клиент в сети. При необходимости, сервер отправляет клиенту уведомление о появлении новых сообщений. Просто, в роли клиента и сервера выступает прослойка от Google, Apple и прочих, а ваше приложение становится подписчиком на их транспортные пакеты.

Вы можете использовать для создания подобной системы WebSocket, который проще организовать, ели на серверной стороне какой-нибудь PHP, или классический сокет, если сервер позволяет запускать произвольные бинарные приложения и вы умеете их писать. Для приложений на Universal Windows Platform (платформа магазина приложений для Win10) доступна служба WNS.

Судя по эпитету "тупой" к варианту "опрос каждые 10 секунд", с концепцией REST вы уже знакомы. Тем не менее, вероятнее всего, это наилучший для вас вариант. Программирование классических сокетов - это, по современным меркам, низкоуровневое программирование, и вопрос требует хорошего понимания принципов работы ЛВС. Лезть туда нужно только в том случае, если у вас действительно высоконагруженный проект (нет, десять запросов от клиентов в секунду - это не High Load :D).

Я не могу дать совет по стеку технологий, не зная сути задачи ). Если вы уже пишете клиент на QT - С++ вам в помощь и для серверной стороны. Если веб-клиенты в будущем не планируются - можно спуститься до уровней обычного TCP-сокета. Уверен, в QT есть библиотеки для поддержки и этих вещей. Если сделать на WebSocket - в будущем можно будет без особых движений с серверной стороны сделать и встраиваемые в веб-страницы клиенты на HTML5/JavaScript.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Mysterion
long polling либо сокет-сервер.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы