Другие языки программирования и технологии
Delphi record to string
Я делаю мини онлайн игру, в которой через Socket передаются координаты игроков. Координаты хранятся в переменной типа TCoord=record X,Y,Z:Real; end; Сейчас у меня каждая координата записывается в строку таким образом: text:=FloatToStr(Coord.X)+'|'+FloatToStr(Coord.Y)+'|'+FloatToStr(Coord.Z); где text потом отправляется на игровой сервер. Такой способ вынуждает отправлять длинные сообщения на сервер, например '105,34861|369,28774|10,87367' занимает 28 байт. Сам же тип в оперативной памяти занимает 18 байт. Как конвертировать этот тип в строку (и потом обратно) , чтобы сэкономить на передаче? Может как-то через указатель?
Можно преобразовать число не в десятичную, а в шестнадцатиричную систему. А еще лучше - в систему с как можно большим основанием, которая допустима для сокета.
Слава
Так вот я и хочу передавать байтами (256). Хотелось бы узнать как прочитать эти байты из оперативной памяти, чтобы занести в string
а как будете числа до 32 передавать?
1) данные не хранятся в прямом виде.
2) указатель получить можете через & и поэтому тут целесообразно применить вставку из asm, а потом будете тратить время на обратное преобразрвание на сервере. .
3) можно же передавать RAW данные помимо строк
1) данные не хранятся в прямом виде.
2) указатель получить можете через & и поэтому тут целесообразно применить вставку из asm, а потом будете тратить время на обратное преобразрвание на сервере. .
3) можно же передавать RAW данные помимо строк
Передавайте, как бинарные данные, без всяких преобразований.
Слава
Вы сами поняли что написали? Произойдет ошибка несоответствия типов.
Не стоит париться с оптимизацией сейчас.
На этапе разработки нужно использовать тот протокол обмена, который проще отладить.
Разумеется, в исходном коде должна быть заложена возможность корректировки протокола:
1. Выделение протокола передачи, кодирования и декодирования в один модуль.
2. Этих модулей должно быть несколько и нужно подменять динамически, например каждый модуль - своя dll.
3. Должен быть реализован запрос к серверу с версией желаемого протокола.
Оптимизировать небоевую версию протокола - тупо расход времени.
Оптимизация всегда основывается на статистике, и не всегда удастся улучшить ВСЕ аспекты.
Задам вам вопрос:
Если путём кодирования координат "сжать" их длину с 28 до 22 байт, то на сколько % сократиться объём передаваемой информации в целом и на сколько % увеличится нагрузка на сервер для декодирования этого "сжатия"?
И как это повлияет на память, выделяемую на сервере в целом и на каждый из клиентов в отдельности?
На этапе разработки нужно использовать тот протокол обмена, который проще отладить.
Разумеется, в исходном коде должна быть заложена возможность корректировки протокола:
1. Выделение протокола передачи, кодирования и декодирования в один модуль.
2. Этих модулей должно быть несколько и нужно подменять динамически, например каждый модуль - своя dll.
3. Должен быть реализован запрос к серверу с версией желаемого протокола.
Оптимизировать небоевую версию протокола - тупо расход времени.
Оптимизация всегда основывается на статистике, и не всегда удастся улучшить ВСЕ аспекты.
Задам вам вопрос:
Если путём кодирования координат "сжать" их длину с 28 до 22 байт, то на сколько % сократиться объём передаваемой информации в целом и на сколько % увеличится нагрузка на сервер для декодирования этого "сжатия"?
И как это повлияет на память, выделяемую на сервере в целом и на каждый из клиентов в отдельности?
Слава
Отвечаю: как раз мой способ и использует декодирование целых три раза (FloatToStr). А мне нужно всего то занести участок памяти для той переменной в строку, а это мне кажется потребует меньше операций.
Похожие вопросы
- чему идентичен тип string в delphi 7 ?
- Согласны с этим - Глубинные причины ненависти к Delphi/Pascal ?
- Delphi:Прочитал, что если при динамическом создании компонента если указать Name объекта, то в последующем можно ->
- Как в Delphi сделать справку?
- Помогите найти ошибку Delphi легкая программка
- Delphi ПОМОГИТЕ ПОЖАЛУЙСТА!
- Assembler Запись / Record, Маска
- Задача на Delphi. Аааа решите пожалуйста :'(
- Про Delphi
- Delphi. Обьясните подробно, что, как, и для чего нужен\используется "while" ?