Сериализация и десериализация нескольких объектов через сокеты в c # .net - PullRequest
2 голосов
/ 26 августа 2011

Я вхожу в программирование сокетов на C # .net для проекта, который я пишу.

Проект будет представлять собой многопользовательскую систему, клиентские службы которой отслеживают системные ресурсы и отсылают отчеты на центральный сервер (ы).

Я изучал Remoting, WCF и т. Д., Чтобыопределить, что будет лучше для меня.Я согласился с программированием сокетов из-за ряда требований:

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

Возможно, я ошибаюсь в своих мыслях здесь?Если я, пожалуйста, скажите.Некоторые предлагают WCF, поскольку он «бесполезен в использовании» и делает все, что я хочу, но я считаю, что это намного медленнее с накладными расходами.

Моя главная проблема заключается в том, что, хотя клиентская машина не будет поддерживать соединение открытым, могут существовать тысячи или десятки тысяч клиентских машин, и я должен был бы предположить, что машина будет забита соединениями,Учитывая минимальное время между соединениями для каждого клиента, может быть всего 1 мин.

Теперь моя проблема: Как отправить несколько объектов по ссылке и, что более важно, как определить, кто онис другой стороны?

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

Проблема в том, что я не могу найти ни одного примера, который действительно делает это.Ни один пример не показывает, как отправить несколько объектов, а затем как определить, что они находятся на другой стороне.

Может кто-нибудь помочь мне здесь или указать примеры.Я вполне могу разобраться, когда у меня есть база для работы.

Ответы [ 2 ]

2 голосов
/ 26 августа 2011

Это похоже на классический случай преждевременной оптимизации и изобретения колеса. Я могу ошибаться, потому что я не знаю, каковы ваши требования к производительности, ресурсам разработки и срокам. Но я подозреваю, что у очень умных людей были такие же проблемы до вас. И они предложили множество решений, включая HTTP (SOAP, REST) ​​и XMPP (если вы хотите протокол Statefull). Многое можно сделать для повышения производительности даже на уровне приложений (минимизация объема данных, передаваемых по проводам, кэширование и т. Д.). Без лишних сложностей, связанных с использованием сокетов напрямую. Вы, наверное, знаете все это, но я настоятельно рекомендую вам еще раз оценить свое решение.

Что касается обычного подозрительного формата сериализации, такого как XML и JSON, вы также можете посмотреть Буферы протокола :

Протокол буфера - это имя используемого формата двоичной сериализации. Google для большей части их передачи данных. Он предназначен для:

  • маленький размер - эффективное хранилище данных (намного меньше, чем xml)
  • дешево для обработки - как на клиенте, так и на сервере
  • не зависит от платформы - переносимо между различными архитектурами программирования
  • расширяемый - для добавления новых данных в старые сообщения
1 голос
/ 26 августа 2011

Возможно, вы пытаетесь изобрести колесо здесь. Но поскольку вы решили использовать сокеты (были там, сделали это, многому научились), прочитайте эти ссылки по сериализации:

...