Online Persist Storage Binary Difference Synchronizer Server
|
|
illusion |
Date: Fr, 2009-02-27, 13:31 | Message # 1 |
Chain Mail
Группа: TH team
Посты: 162
Репутация: 16
Замечания: 0%
Статус: Offline |
На данный момент The Hell Team (это в основном я гы гы) разрабатывает технологию бинарной синхронизации перманентных объектных хранилищ. Именно через сервер работающий как центральное перманентное хранилище миров будет осуществляться синхронизация локальных копий миров у пользователей. У каждого пользователя сервера будет свой баланс на сервере, с которого будут сниматься деньги за исходящий с сервера трафик данных синхронизации. Тариф будет определён за мегобайт трафика ближе к делу. Но думаю в районе 10 коп. за Мб, может и больше. Один мир буде занимать где то от 8 Мб. |
|
| |
Новичок |
Date: Tu, 2009-03-24, 16:11 | Message # 2 |
Группа: Гость
|
[quote=illusion]технологию бинарной синхронизации перманентных объектных хранилищ. [/quote] Простите, а что это значит. Дело в том, что я работаю начальником в гугл и мне нравятся новые, креативные, инициатывные подходы к решению таких интересных проблем. Не могли бы Вы послать резюме к нам, в гугл? Спасибо.Добавлено (2009-03-24, 16:11) --------------------------------------------- [quote=illusion]Один мир буде занимать где то от 8 Мб.[/quote] Мне кажется, что 8Мб для мира это много. Я сижу на диалапе. Можно сделать мир размеров хотя бы в 512Кб (если писать на ассемблере, то можно сильно съэкономить на размерах)? |
|
| |
illusion |
Date: We, 2009-03-25, 15:07 | Message # 3 |
Chain Mail
Группа: TH team
Посты: 162
Репутация: 16
Замечания: 0%
Статус: Offline |
Новичок, ну во первых я только что ушел на новую работу, а во вторых у меня резюме довольно простое: умею программировать. Этого на самом деле достаточно. По поводу технологии: я буду её постепенно развивать, идея такая примерно (доверяю знать, потому как продать некому:) всё программные объекты персистные ( находятся в персистном адресном пространстве, это может быть SQL сервер, файл, и т.д.) персистные указатели это шаблонный класс. Есть некий механизм который кэширует персистные объекты в обычном адресном пространстве компьютера, таким образом что это вобщем то незаметно. Далее при необходимости репликации состояний объектов между их изменениями используется следующий механизм: на уровне кэша персистных объектов в начале выполнения некоего метода объекта сохраняется его бинарное состояние, при выходе(потока управления) из метода делается бинарный diff, и изменения отправляются клиентам, по элементарному протоколу бинарной синхронизации состояний. Это вобщем. На практике конечно вылазиет много подводных камней. Но преимущество идеи в быстрой интеграции сетевой поддержки в игры например. (сихронизировать надо только в части последствий непредсказуемых действий пользователей, в остальной части где системы живут детерминированно синхронизацию делать не нужно) Пишите если интересно... |
|
| |
Ырод |
Date: We, 2009-03-25, 15:28 | Message # 4 |
Группа: Гость
|
Сколько трафика в секунду? Если 2 чела в "кадре" мочат толпу монстров, например. |
|
| |
illusion |
Date: We, 2009-03-25, 15:42 | Message # 5 |
Chain Mail
Группа: TH team
Посты: 162
Репутация: 16
Замечания: 0%
Статус: Offline |
ну байт 100-200 в сек. максимум |
|
| |
illusion |
Date: We, 2009-03-25, 15:43 | Message # 6 |
Chain Mail
Группа: TH team
Посты: 162
Репутация: 16
Замечания: 0%
Статус: Offline |
Ырод, шалишь тигранчик... |
|
| |
Ырод |
Date: We, 2009-03-25, 15:58 | Message # 7 |
Группа: Гость
|
Я те посещаемость накручиваю, и заметь, бесплатно! )) А то те че-то окромя директоров гугля нихто не пишеть. |
|
| |
StEAlTh_ASsAsIN |
Date: We, 2009-03-25, 16:28 | Message # 8 |
Chain Mail
Группа: Череп
Посты: 283
Репутация: 3
Замечания: 0%
Статус: Offline |
Quote А то те че-то окромя директоров гугля нихто не пишеть. =DDD
Так устроена эта игра. |
|
| |
Новичок |
Date: Th, 2009-03-26, 12:13 | Message # 9 |
Группа: Гость
|
А Вы хотите отправлять изменения при любом изменении состояния объекта или делать снимки изменений через определенные промежутки времени? >>в начале выполнения некоего метода объекта сохраняется его бинарное состояние, при выходе(потока управления) из метода делается бинарный diff А если не сам объект изменяет своё состояние, а сторонний объект изменяет состояние объекта непосредственно через экземплярные поля и свойства? Или Вы хотите закрыть все публичные поля и менять состояние объекта только через методы. Тогда необходимо перед выполнением метода дернуть некий метод типа EnterModify и перед выходом дернуть LeaveModify? Или планируется некий механизм прозрачных иньекций подобных методов, т.е. объект не будет знать ничего о синхронизациях? >>изменения отправляются клиентам Через общий сервер, т.е. раздача централизована или нужны соединения p2p? Еще интересно какой протокол в основе TCP или UDP, как обрабатывать разрывы соединений, могут ли при этом теряться данные, т.е. такая ситуация: игрок убил монстра, но данные об этом еще не ушли на сервер, выключается свет у игрока, после загрузки игры снова придется убивать монстра? Это может стать проблемой в сетевой игре. |
|
| |
illusion |
Date: Th, 2009-03-26, 15:53 | Message # 10 |
Chain Mail
Группа: TH team
Посты: 162
Репутация: 16
Замечания: 0%
Статус: Offline |
Новичок, вообще технология относится к синхронизации персистных хранилищ, там сихронизация может проходит и по подписке и по запросу и рассылка по факту...как угодно короче. А использование в игре это уже дело десятое... Меня например интересует больше как хранить в персистном хранилище объекты классы которых используют наследование, вот это интересно и я думаю решаемо. Синхронизация будет идти незаметно для объекта на уровне менеджера памяти занимаемой объектами. Я говорю про достаточно простые игры где есть детерминированность мира. Но для запуска поддержки сети в игре надо сделать следующее: 1. сделать все объекты персистными и что бы они использовали персистные указатели (для того что бы в памяти занимаемой объектами не было данных с указателями на локальную память компьютера, т.к. на другой машине эти данные станут некорректными) 2. в начале метода который может поменять мир и это изменение непредсказуемо необходимо будет вставить всего одну строчку, типа BinDiffSynchnize(); Если требуется синхронизация мира по частям то тут немного по сложнее, может и придётся вводить специальные методы... Примерно так: Цикл работы на клиенте: 1. отсылаем на сервер события от мышки и клавы за предыдущий цикл 2. принимаем от сервера непредсказуемые изменения мира вместе с CRC мира (если CRC не сходится то идёт запрос за бинарное дерево CRC, для определения страницы памяти на которой не сходится CRC и далее идёт запрос страницы целиком) 3. принимаем разрешение от сервера на переход к следующему циклу 4. делаем update локальной копии мира 5. переходим к 1 Цикл работы на сервере: 1. принимаем непредсказуемые события от пользователей 2. сохраняем состояние мира (не обязательно весь мир сохранять, можно и с иерархией работать) 3. обрабатываем непредсказуемые события от пользователей 4. делаем бинарный дифф. и рассылку клиентам изменений мира в результате непредсказуемого поведения пользователей 5. отправляем разрешение на Update мира 6. делаем Update мира на сервере 7. переход к 1 И какую же вы там игрушку пишете в Гугле если не секрет??? Когда сделаю поддержку в TheHell 2 детали прояснятся. На данный момент уже кое как работают персистные объекты и персистные указатели. Наработки по сети тоже есть, надо только прикручивать. Бинарный синхронизатор это очень простая вещь. Протокол тоже простой. |
|
| |
Ырод |
Date: Th, 2009-03-26, 16:14 | Message # 11 |
Группа: Гость
|
А рейтрейсинг появится сразу в первой версии, или чуть позже?.. То есть, мне уже пора апгрейдить комп, или можно подождать пару месяцев? |
|
| |
illusion |
Date: Th, 2009-03-26, 16:21 | Message # 12 |
Chain Mail
Группа: TH team
Посты: 162
Репутация: 16
Замечания: 0%
Статус: Offline |
Ырод, твой комп вообще несгодитцо! |
|
| |
Ырод |
Date: Th, 2009-03-26, 16:22 | Message # 13 |
Группа: Гость
|
Кстати, может лучше сначала доделать воксельный движок? |
|
| |