2012-02-27 2 views
1

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

ответ

5

Для сериализации в основном означает преобразование в состояние, соответствующее некоторому типу хранения. Данные, отправляемые по сети, должны быть выведены из памяти или отключены от HD и помещены в некоторый формат для отправки. Он ВСЕ сериализуется.

Люди могут сказать, сериализованы в XMl или JSON, что является очень специфическим типом сериализации, который тогда да, у вас могут быть лучшие или худшие, в зависимости от ваших потребностей.

+0

Что я обычно использую, это BinaryFormatter, это то, что лучше всего отправлять structs oever в сокет? ищет скорость. – Shredder2500

+0

Да, если ваша единственная цель - скорость передачи. Двоичный, поскольку вы делаете это, будет лучшим. – Jordan

+0

хорошо спасибо – Shredder2500

0

Я наткнулся на ваш вопрос и в вечном стремлении просвещать себя по разным темам. Я решаю заняться чтением/исследованием. Я уверен, что вы, возможно, столкнулись с этими вещами, но прочитали ли вы о Windows Communication Foundation (WCF)? Вот одна статья, которая может иметь некоторую актуальность http://blogs.msdn.com/b/carlosfigueira/archive/2008/01/13/writing-custom-requests-to-simple-wcf-services.aspx.

Также в этой статье люди говорят о том, как они сделали связь на основе сокетов, но ранее не рассматривали WCF, но это казалось чем-то вроде благословения. Некоторые люди в этой статье C# Sending multiple objects over same Socket сказали, что , если накладные расходы очень важны в этом сценарии, тогда это может быть проблема, но я полагаю, что это больше зависит от того, что вы пытаетесь выполнить (хотя вы сказали, что это для игр).

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

Извините, если я бессвязно, но я надеюсь, что ничего из этого помогает :)

+0

Спасибо за ввод, я знаю о WCF, но я просто хотел узнать, потому что я и друг говорили о C# и сокетах и ​​о том, как одна из моих программ отправляет материал. когда он увидел, что я использовал Сериализацию, он сказал, что он читал, когда это не лучший способ сделать это, но я никогда не слышал о другом способе делать это, поэтому поэтому я спросил – Shredder2500

+0

Эй, спасибо за ваш ответ. Извините, если мой ответ не был именно тем, что вы искали. Я, конечно, не специалист по этой проблеме, но хотел бы узнать больше об этом, поэтому я больше читаю. Я наткнулся на некоторые другие ссылки, которые, хотя я не могу сказать, что это лучшая практика, может быть полезной: http://stackoverflow.com/questions/284885/multi-client-async-sockets-in-c-best-practices и (для сокетов против WCF) http://stackoverflow.com/questions/1040278/sockets-vs-wcf. – SMT

+0

Большое спасибо за ваши ссылки. Если вы хотите обсудить больше вещей о C#, чтобы мы могли узнать больше, у меня есть skype, поэтому у нас нет комментариев навсегда, просто дайте мне знать – Shredder2500

1

В .Net, сериализация обрабатываются рамками, поэтому программирование интерфейса для обработки объектов довольно легко.

Если вам нужно сохранить сложный объект, идентичный хосту A хосту B, то сериализация полезна. В противном случае, если вам нужно только одно или два свойства этого объекта, которые должны быть получены хостом B, и все же хотите его сериализовать, вам нужно будет превратить его в более простой объект и, возможно, создать новый класс, который не является преимуществом ,

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

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