Пятница, 17.11.2017, 23:17
Приветствую Вас Гость | RSS

Кузница миров

Меню сайта
Категории раздела
Мои статьи [2]
Курс : "Основы С++ для начинающих программистов игр." [25]
WindMill Engine [3]
XNA4 RPG [0]
Перевод туториалов но созданию RPG на C# c XNA4.
C# & Leadwerks [5]
Программирование Leadwerks Engine на языке С# с помощью врапера Le.NET.

Каталог статей и уроков

Главная » Статьи » WindMill Engine

Ода сети
Ода сети

В движке Windmill engine поддержка сети для всех языков писалась индивидуально. Причины для этого везде были разные. Например в C# было довольно проблематично реализовать функции обратного вызова, передаваемые в нативный код. На таком принципе были построены сетевые события. Они работали, но почему-то через раз. Если где то портилась память, все ссылки съезжали и получалось черте что. Помучившись, было решено написать сетевой код на C#.
Схожая ситуация была с другим управляемым языком – Java, но там были свои заморочки. Указателей на функции в Java вообще нет. Способы, которые использовались для их замены, например в системе ГУИ, для сети не подошли из-за сравнительно низкой скорости.
В результате каждый язык имеет собственный сетевой код. И хоть везде принцип работы сети примерно одинаков, есть некоторые нюансы, делающие две программы, написанные на разных языках несовместимыми.
Больше всего это проявляется в кодировке символом, ведь посылаемые по сети сообщения в движке являются строками. Поэтому возможна ситуация, когда один клиент отправляет юникодовские строки (по умолчанию на Java), а другой принимает их, считая 256 символьным char-ом. А поскольку юникодовские символы, в отличии от обычных(в с++) занимают два байта, получается каша.
Основной способов избежать этого, использовать везде единую кодировку.
Кроме того не лишним будет реализовать некий контроль целостности сообщений. Например вставлять в сообщение информацию о его размере. Если при его считывании он не будет соответствовать реальному размеру сообщения, пытаться этот вопрос как-то решить. Такой контроль очень важен, ведь протокол TCP/IP имеет мерзкую привычку объединять короткие сообщения. Это его свойство можно отключить, но когда пакеты проходят через много узлов, отключение не всегда срабатывает.
Контроль целостности сообщений не реализован изначально по той причине, что в текст сообщения нужно вставлять некие спецсимволы, при этом не известно заранее, какие данные будут отправляться по сети. Не исключено какой-то символ примет вид зарезервированного под специальный, и смысл сообщения нарушится.
Так что я оставляю это на ваше усмотрение.
Категория: WindMill Engine | Добавил: nilrem (11.05.2012)
Просмотров: 424 | Комментарии: 1 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0