Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Реализация обмена между программами инофрмацией 
:(
    Опции темы
drayvhard
Дата 5.11.2013, 21:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 1.2.2012

Репутация: нет
Всего: нет



Здравствуйте, ребята!
Вот у меня возникла проблема реализации обмена данных между программами (серверами и клиентами)

Пусть у сервера есть std::vector<double> и он постоянно обновляется, независимо от клиентов, то есть наполняется... В определённый момент  (я думаю, что в данном контексте лучше всего использовать сокеты, хоть и сервер и клиен работает на одном компе, но сокеты ближе, чем named pipes... нужна возможность работы и по сети... хотя кажется pipes могут работать и через сеть... но не в этом дело), клиент подключается к серверу и говорит: "мне нужен контент твоего супер вектора", после этого нужно отослать весть контент этому клиенту...
Скажите пожалуйста, как такое реализовать? Хотя бы идею... Пусть к этому серваку может быть подключено энное количесво клиентов... и всех нужно обработать...

Далее, больше... пусть сервак всё отослал клиентам и ждёт с "моря погоды", и тут в него поступают новые данные... Сервер должен как-то всех клиентом оповестить и отослать эти данные... Как тут поступить? Постоянно держать сокет открытым на R/W между клиентами и сервером? Это типа пуш такой будет?

Ну и третье: пусть на одном компе есть туча клиентов, которые подключаються к СерверАМ. То-есть мы имеем на одном компе 2 серверных приложения... как к ним обращаться по отдельности? Ведь хост тотже будет? Дифференцировать их по номеру порта? или каким то другим образом? 

Буду рад идеям и помощи...Спасибо!
PM MAIL   Вверх
bsa
Дата 5.11.2013, 21:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(drayvhard @  5.11.2013,  22:38 Найти цитируемый пост)
Скажите пожалуйста, как такое реализовать?
сокет - это по сути файл, открытый на чтение/запись. Бери и записывай свой вектор в него. Можешь в двоичном виде, если уверен, что платформы сервера и клиента полностью совпадают, или в текстовом, или использовать сереализацию (см. например boost serialization).
Цитата(drayvhard @  5.11.2013,  22:38 Найти цитируемый пост)
Как тут поступить? Постоянно держать сокет открытым на R/W между клиентами и сервером? Это типа пуш такой будет?
Это смотря что для тебя выгодней. Если клиентов мало, а данные обновляются часто, то тогда выгодней держать сокет открытым. Если клиенты мобильные или данные обновляются редко, то лучше пусть они каждый раз запрашивают изменения (например, ревизию данных, которая инкрементируется при каждом их изменении на стороне сервера, а клиенту передается вместе с данными).
Цитата(drayvhard @  5.11.2013,  22:38 Найти цитируемый пост)
Дифференцировать их по номеру порта?
только так и можно. для этого собственно порты и придуманы были.

PM   Вверх
drayvhard
Дата 5.11.2013, 22:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 1.2.2012

Репутация: нет
Всего: нет



Цитата(bsa @ 5.11.2013,  21:53)
Цитата(drayvhard @  5.11.2013,  22:38 Найти цитируемый пост)
Скажите пожалуйста, как такое реализовать?
сокет - это по сути файл, открытый на чтение/запись. Бери и записывай свой вектор в него. Можешь в двоичном виде, если уверен, что платформы сервера и клиента полностью совпадают, или в текстовом, или использовать сереализацию (см. например boost serialization).
Цитата(drayvhard @  5.11.2013,  22:38 Найти цитируемый пост)
Как тут поступить? Постоянно держать сокет открытым на R/W между клиентами и сервером? Это типа пуш такой будет?
Это смотря что для тебя выгодней. Если клиентов мало, а данные обновляются часто, то тогда выгодней держать сокет открытым. Если клиенты мобильные или данные обновляются редко, то лучше пусть они каждый раз запрашивают изменения (например, ревизию данных, которая инкрементируется при каждом их изменении на стороне сервера, а клиенту передается вместе с данными).
Цитата(drayvhard @  5.11.2013,  22:38 Найти цитируемый пост)
Дифференцировать их по номеру порта?
только так и можно. для этого собственно порты и придуманы были.

А в нашем случае, что будет надёжнее и быстрее из методов IPC: сокеты, shared memmory или named pipes?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0594 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.