2009-07-13 4 views
1

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

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

+0

Почему вы не можете сделать обе библиотеки DLL на том же языке? – kkaploon

+0

Есть разные причины, в которые я не попаду. Короткий вариант заключается в том, что это не мое решение :) – djcouchycouch

+0

Можно ли использовать Windows в обоих приложениях? – chrish

ответ

2

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

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

0

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

  • Во-первых, библиотека, которая работает как с C++, так и C#? Скорее всего, не.
  • Во-вторых, «синхронно» как? У кого есть приоритет при внесении изменений на оба? Какие у вас замки будут иметь место? Это все очень важные правила, которые будут очень специфичны для типа операций и правил, которые вы пытаетесь сделать go for.
+0

Это не похоже на одноранговую сеть для игр, я полагаю – djcouchycouch

+0

Вопрос был намеренно неопределенным, так как я не уверен, что там. Хотя я знаком с несколькими игровыми сетевыми библиотеками, я не знаю, что доступно для более серьезных приложений. – djcouchycouch

0

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

0

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

0

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

Проект MSDN Magazine article.

+0

К сожалению, C++ неуправляем. И я не думаю, что это когда-нибудь будет. – djcouchycouch

0

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

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

0

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

код все с открытым исходным кодом (BSD), и может быть найден здесь:

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

Смежные вопросы