2014-08-27 2 views
-1

Я новичок в сокетах, и у меня есть некоторые теоретические вопросы относительно клиента < -> Связь с сервером.Сокеты и форматы передачи данных

Вопрос о типе и формате сообщения.

  1. Если я буду использовать строку как байты [] с разделителями в сообщении, для всех операций клиент-сервер, это хорошая практика для высокой нагрузки проекта? Пример: «CMSG_AUTH: Логин: Пароль»

  2. Я слышал, что кто-то использует коды операций как команду возврата сервера. Должен ли я использовать строки и коды операций в тандеме? И как? Какие шаблоны проектирования были бы полезными для внутренней архитектуры сервера? (Я знаю, это глупый вопрос, но мне очень интересно развитие сервера, и это моя мечта написать хорошее масштабируемое серверное приложение). Я не хочу использовать WCF, я хочу сделать это с нуля, просто чтобы понять, как это работает.

+1

Вы думаете о TCP или UDP? Общей ошибкой начинающих является не осознание того, что сокеты TCP просто предлагают абстракцию «потока байтов» - если вы хотите * сообщения *, вам решать реализовать те, которые находятся поверх абстракции TCP. –

+0

Я имел в виду TCP :) – Jesse

+1

Да, ладно. Поэтому, если вам нужны сообщения, вы должны их реализовать. Вызов 'Receive' может получить * часть * сообщения. Или конец одного сообщения, другое полное сообщение и начало третьего. Или любую другую комбинацию, о которой вы можете думать. –

ответ

0

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

Примеры форматов: JSON, xml (использует строки) или protobuf (двоичные).

Определить классы для информации, которую вы хотите передавать между клиентом и сервером:

class LoginDto 
    { 
     string UserName {get;set;} 
     string Secret{get;set;} 
    } 

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

Ищите DataContractSerializer, JSON.Net или Protobuf-net для реализаций сериализаторов XML, JSON и протобуфа.

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