Синхронизация объектов по сети? - PullRequest
1 голос
/ 13 июля 2009

В моем приложении у меня есть две библиотеки DLL. Один написан на C #, а другой на C ++. Они общаются друг с другом по сети. У каждого есть список экземпляров объектов, которые должны быть синхронизированы друг с другом в любое время

Какие сетевые библиотеки доступны для этого?

Ответы [ 7 ]

2 голосов
/ 13 июля 2009

Это на самом деле довольно сложная проблема, чтобы сделать ее правильно, и, как таковая, есть много способов подойти к ней. Я думаю, что лучший способ сделать это - использовать что-то вроде протокольных буферов, которые имеют библиотеки c ++ и c # . В зависимости от размера ваших данных, вы можете просто сериализовать весь объект данных и отправить его по проводам, а затем десериализовать его на другой стороне, а затем повторять это всякий раз, когда объект изменяется.

Конечно, у вас могут возникнуть проблемы с синхронизацией, если обе стороны изменят объект одновременно. В этом случае вам, возможно, придется сделать что-то вроде Google Wave , и отправить различия данных, и объединить изменения.

1 голос
/ 14 июля 2009

Я не знаю, действительно ли это то, что вы имели в виду, но я написал систему (библиотека C ++ с необязательным серверным процессом) для такого рода вещей. Он включает в себя клиентские API для C #, C ++, C, Java и Python, и все они могут взаимодействовать друг с другом, используя один и тот же протокол сериализации данных, поэтому он хорошо работает для межязыкового и / или межплатформенного взаимодействия. Эти два процесса могут взаимодействовать друг с другом напрямую, или, если вы хотите поддерживать взаимодействие N процессов, вы можете запустить сервер, который может хранить общие объекты в «центральном местоположении», и позволить различным клиентам видеть их и уведомлять их, когда они ». были изменены, широковещательные / многоадресные сообщения друг другу и т. д.

Код полностью с открытым исходным кодом (BSD), и его можно найти здесь:

https://public.msli.com/lcs/muscle/

0 голосов
/ 14 июля 2009

Я не понимаю ваш вопрос, особенно то, что вы подразумеваете под "синхронно", но, возможно, вы просто используете широкую сеть.

Я выбрасываю ЛЕД . Это более легкая и простая в использовании версия CORBA, которая поддерживает C # и C ++. Посмотри на это. Это может или не может быть наименее применимым к тому, что вы делаете.

0 голосов
/ 13 июля 2009

Существует проект под названием Velocity , который "обеспечивает хорошо масштабируемый кэш приложений в памяти для всех видов данных". Это только для управляемого кода. Является ли управляемый код C ++ (или это может быть управляемый код)?

Вот статья MSDN Magazine о проекте.

0 голосов
/ 13 июля 2009

Я не уверен, что полностью понимаю вашу ситуацию, но мне интересно, если вы говорите о том, чтобы и клиент, и сервер имели одинаковую версию интерфейса во время первоначального подключения. Если это не так, то устаревшая сторона может либо потерпеть неудачу, либо запросить обновление. Это в основном то, что делают MMORPG.

0 голосов
/ 13 июля 2009

Вы можете использовать DCOM , если все работает в Windows.

0 голосов
/ 13 июля 2009

Это довольно расплывчатый вопрос.

  • Во-первых, библиотека, которая работает с обоими с ++ и с #? Маловероятно.
  • Во-вторых, "в синхронизации", как? У кого есть приоритет при внесении изменений как для? Какие у тебя замки будет на месте? Это все очень важные правила, которые будут очень специфичен для типа операции и правила, которые вы пытаетесь перейти на.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...