WCF или сокеты для общения в режиме реального времени? - PullRequest
3 голосов
/ 08 января 2011

У меня есть сценарий, в котором мне нужно отправить серию данных через 2 клиента.

Данные включают в себя сериализованный XML, который будет содержать команды, на которые другой клиент должен будет реагировать.

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

Я хотел бы использовать один и тот же носитель для обоих, как количество сообщений /команд может быть несколько.

WCF или сокеты?

Ответы [ 3 ]

4 голосов
/ 09 января 2011

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

Прежде всего, какие функции транспорта вам нужны для такого приложения?Мои знания о передаче голоса / видео очень плохие, но я ожидаю:

  • Дуплексная связь, когда клиент подключается к серверу чата, отправляет свои голосовые / видео данные и получает голосовые / видео данные другого клиента.
  • Потоковая передача - объем данных может быть довольно большим, поэтому было бы неплохо работать с данными, когда вы начнете их читать.Более того, предполагается, что некоторые алгоритмы кодирования используются для потоковой передачи.
  • Качество обслуживания - контроль устойчивого темпа передачи.(Если вы хотите организовать видеочат на конференции, вам также необходима координация нескольких потоков)

Поэтому, просто описав эти три ожидания, я уже вижу проблему.Встроенная привязка WCF Net.Tcp не разрешает двустороннюю связь и потоковую передачу вместе .Также имейте в виду, что производительность связи Net.tcp через WCF намного хуже, чем обычная связь через сокеты.Это потому, что WCF многое упрощает, но это упрощение и обобщения замедляют обработку.

Также на основе выбранного алгоритма это может быть проблемой.

Здесь Вы можете найти описание видео-чата в Silverlight 4. Silverlight позволяет связывать WCF и net.tcp, но связь все еще развивается на сокетах.

Здесь можно найти описание широко используемых протоколов для передачи голоса по IP - RTP для передачи данных и RTCP для координации и QoS.Эти протоколы также используются для передачи видео.По поиску, я нашел реализацию для .NET (я не знаю, насколько хороша реализация, я просто использовал Google ...)

3 голосов
/ 09 января 2011

Вот некоторые вещи, о которых я бы подумал:

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

WCF предоставляет вам абстракцию более высокого уровня, так что, вероятно, вы сможете писать свою систему быстрее. В частности, такие вещи, как XML-кодирование и управление сессиями, на самом деле не являются частью вашей прикладной области, и поэтому вы не хотите тратить на них много времени. Но более высокая абстракция обычно сопряжена с затратами на производительность, поскольку уровень абстракции более универсален, чем любое приложение. С простыми сокетами вы можете адаптировать свою систему к вашим собственным потребностям, и это может обеспечить более высокую производительность (за счет более трудоемкой разработки и исправления ошибок).

Возможно, вы захотите отправить свои данные / команды и видео в отдельных потоках. Предположительно данные / команды должны быть отправлены через надежный транспорт, но видео может понести некоторую потерю. Или, может быть, видео должно быть отправлено с высоким QOS, тогда как данные / команды могут иметь задержку. На самом деле я никогда не использовал QOS, и поэтому я не знаю, какие здесь проблемы, но это может повлиять на ваше решение о WCF (положительно или отрицательно).

Вы можете разместить свой сервер в своем собственном процессе или в IIS. Если вы организуете его самостоятельно, вы можете делать все по-своему. Я считаю, что WCF и IIS - хорошие друзья, поэтому если вы думаете, что IIS, то WCF может сделать жизнь намного проще. Если вы выберете IIS (или любой другой установленный веб-сервер) вместо своего собственного хоста, вы сможете воспользоваться их инфраструктурой - масштабируемостью, надежностью, шифрованием и т. Д. Недостатком является то, что вы можете быть заблокированы на этом сервере, но на практике это может не быть проблемой.

В зависимости от вашей среды вы можете комбинировать различные технологии и функции. Например, у нас есть система, которая звучит примерно так же, как ваша, и мы выбрали: простые сокеты в клиенте; простые сокеты на сервере, но с возможностью размещения сервера в Apache; настраиваемая библиотека XML, которая делает именно то, что нам нужно; встроенный OpenSSL; COM в ядре системы, но с зависимостями от .NET. В частности, мы использовали SOAP в нашем первом прототипе, потому что его обмен сообщениями и RPC идеально подходили для нашего дизайна, но обнаружили, что он добавил слишком много сложности и заменил его собственным протоколом.

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

0 голосов
/ 08 января 2011

WCF или Розетки ???Это не альтернативы: WCF включает в себя NetTcpBinding и NetPeerTcpBinding для связи TCP / IP.

Если ваши клиенты оба Windows, вы должны использовать WCF.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...