[Evaporation Project] Система дистрибуции файлов
-
- Разработчик
- Сообщения: 910
- Зарегистрирован: 09.01.2009
- Откуда: Переезжаю в /dev/null
- Благодарил (а): 7 раз
- Поблагодарили: 65 раз
- Контактная информация:
Предлагаю обсудить способы дистрибуции файлов игр. А именно как будет происходить передача данных.
На данный момент я рассмотрел возможности использоваияуже готовых протоколов, а именно Direct Connect и BitTorrent. И пришл к выводу, что оба они имеют лишний функционал и достаточно сложны в реализации. К тому-же в них кое-чего нету. Поэтому они оба были мной отброшены как не подходящие, тоесть на крайний случай.
Вводная закончена :)
Ну вот, значит, пишем свой протокол. Скорее всего из кусочков уже существующих, но это не особо важно.
А теперь, собственно, что я собрасля обговорить.
Прежде всего - что мы хотим получить?
Мои мысли на этот счёт:
1. Скачака файлов происходит не с главного сервера, а со специальных дополнительных серверов.
2. Информация обо всех файлах на всех доп. серверах имеется на главном сервере. Для него мы можем, наверное, использовать торрентный термин "трекер". Кому не нравиться - готовите главный сервер. %)
3. Файлы могут быть размещены не на одном доп. сервере, а на нескольких сразу, чтобы можно было использовать скачку с нескольких серверов сразу (с зеркалами).
4. Будет производиться скачка одного фала одновременно (одна копия клиента может качать только один файл - тоесть не как, например тотже uTorrent, а с очередью в один файл). Хотя для реализации самого протокола это и не важно. %)
5. Каждый файл будет иметь уникальный идентификатор, под которым он будет известен на главном сервере. Возмлжно это будет md5 хеш файла, но он в любом случае будет основан на содержимом файла.
6. Для передачи папок или нескольких файлов в одном алиасе будет использоваться либо архиватор, либо собственный формат файлов (без сжатия, просто слепление нескольких файлов в один).
Это, пока, всё. Жду ваших идей - дополнений, несогласий или вообще собственной структуры протокола ;)
UPD 07.05.09
Я выбрал как нам передавать алиасы, так что пункт 6 уже определён. Они будут передаваться в файлах типа .elib Структура этих файлов будет простая:
Код:
[идентификатор формата][размер общего заголовка][общий заголовок - указаны размеры каждого файла, имена файлов и папок и где они находятся, всмысле подпапки итд][файл1][файл2][файл3][файлN]
На данный момент я рассмотрел возможности использоваияуже готовых протоколов, а именно Direct Connect и BitTorrent. И пришл к выводу, что оба они имеют лишний функционал и достаточно сложны в реализации. К тому-же в них кое-чего нету. Поэтому они оба были мной отброшены как не подходящие, тоесть на крайний случай.
Вводная закончена :)
Ну вот, значит, пишем свой протокол. Скорее всего из кусочков уже существующих, но это не особо важно.
А теперь, собственно, что я собрасля обговорить.
Прежде всего - что мы хотим получить?
Мои мысли на этот счёт:
1. Скачака файлов происходит не с главного сервера, а со специальных дополнительных серверов.
2. Информация обо всех файлах на всех доп. серверах имеется на главном сервере. Для него мы можем, наверное, использовать торрентный термин "трекер". Кому не нравиться - готовите главный сервер. %)
3. Файлы могут быть размещены не на одном доп. сервере, а на нескольких сразу, чтобы можно было использовать скачку с нескольких серверов сразу (с зеркалами).
4. Будет производиться скачка одного фала одновременно (одна копия клиента может качать только один файл - тоесть не как, например тотже uTorrent, а с очередью в один файл). Хотя для реализации самого протокола это и не важно. %)
5. Каждый файл будет иметь уникальный идентификатор, под которым он будет известен на главном сервере. Возмлжно это будет md5 хеш файла, но он в любом случае будет основан на содержимом файла.
6. Для передачи папок или нескольких файлов в одном алиасе будет использоваться либо архиватор, либо собственный формат файлов (без сжатия, просто слепление нескольких файлов в один).
Это, пока, всё. Жду ваших идей - дополнений, несогласий или вообще собственной структуры протокола ;)
UPD 07.05.09
Я выбрал как нам передавать алиасы, так что пункт 6 уже определён. Они будут передаваться в файлах типа .elib Структура этих файлов будет простая:
Код:
[идентификатор формата][размер общего заголовка][общий заголовок - указаны размеры каждого файла, имена файлов и папок и где они находятся, всмысле подпапки итд][файл1][файл2][файл3][файлN]
- $t@t!c_V()1D
- Разработчик
- Сообщения: 2639
- Зарегистрирован: 06.12.2007
- Благодарил (а): 10 раз
- Поблагодарили: 29 раз
"И здесь я исчезаю..." - сказал G-man я, посмотрев на свою скорость соединения %) .
Another guy on them internets
Уважайте команду CSMania.RU - задавайте вопросы правильно!
Уважайте команду CSMania.RU - задавайте вопросы правильно!
- YASTREB2008
- Сержант
- Сообщения: 30
- Зарегистрирован: 11.12.2008
-
- Разработчик
- Сообщения: 910
- Зарегистрирован: 09.01.2009
- Откуда: Переезжаю в /dev/null
- Благодарил (а): 7 раз
- Поблагодарили: 65 раз
- Контактная информация:
Блин. %) Меня кажется не поняли. Я предлагаю обсудить возможность реализации собствнного протокола обмена данными. Только теория, ну может небольшие технические подробности. Пока-что это никак не связано ни со стимом, ни с играми. Только протокол для передачи данных через сеть.
YASTREB2008
Нет, это не программа вообще. Эта тема предназначена для обсуждения протокола.
Shift1493
Вопрос пока слишком ранний. Вообще, клиентская часть будет представлена в виде новой верси ClientCache Manager'a, возможно с другим названием. А вообще, мне кажется ты не очень в теме (твои вопросы меня насторожили %)) И ещё, про DC я всё сказал. Там слишком много лишнего.
YASTREB2008
Нет, это не программа вообще. Эта тема предназначена для обсуждения протокола.
Shift1493
Вопрос пока слишком ранний. Вообще, клиентская часть будет представлена в виде новой верси ClientCache Manager'a, возможно с другим названием. А вообще, мне кажется ты не очень в теме (твои вопросы меня насторожили %)) И ещё, про DC я всё сказал. Там слишком много лишнего.
- $t@t!c_V()1D
- Разработчик
- Сообщения: 2639
- Зарегистрирован: 06.12.2007
- Благодарил (а): 10 раз
- Поблагодарили: 29 раз
Ну, ладно. Что если взять тот же http и уже от него плясать? Навороты всякие приделывать и т.п. У меня, например, так сделано: для закачки мини-GCF для SID2GCF на сервере лежит файл с индексами архивов, размером, AppID и ещё чем-то :-D . Когда надо, тогда я его скачиваю, читаю и смотрю что мне надо скачать.
Впрочем, признаюсь, я не силен в этом: мне это кажется немного заоблачной идеей...почему-то. Впрочем, кое с чем я могу может помочь. Хотя чем?
Впрочем, признаюсь, я не силен в этом: мне это кажется немного заоблачной идеей...почему-то. Впрочем, кое с чем я могу может помочь. Хотя чем?
Another guy on them internets
Уважайте команду CSMania.RU - задавайте вопросы правильно!
Уважайте команду CSMania.RU - задавайте вопросы правильно!
-
- Разработчик
- Сообщения: 910
- Зарегистрирован: 09.01.2009
- Откуда: Переезжаю в /dev/null
- Благодарил (а): 7 раз
- Поблагодарили: 65 раз
- Контактная информация:
$t@t!c_V()1D
Да, я вот сейчас и определяю, как лучше отдавать файлы клиенту - через HTTP/FTP/Самописный сокетный саб-протокол :)
Через HTTP и FTP такая скачка как я хочу возможна только с помощью расстреливания сервера запросами на выдачу куска файла. Это, кстати, решит проблему зеркальности и многопоточной скачки файла.
Кстати я выбрал как нам передавать алиасы, такчто пункт 6 уже определён. Они будут передаваться в файлах типа .elib Структура этих файлов будет простая:
Добавлено спустя 50 секунд:
[user]
Я думаю, не смогу перевести... терпения не хватит %) Надо переводчиков просить...
Кстати если кто из них читает эту тему, переведите заголовочный пост если не сложно %)
Да, я вот сейчас и определяю, как лучше отдавать файлы клиенту - через HTTP/FTP/Самописный сокетный саб-протокол :)
Через HTTP и FTP такая скачка как я хочу возможна только с помощью расстреливания сервера запросами на выдачу куска файла. Это, кстати, решит проблему зеркальности и многопоточной скачки файла.
Кстати я выбрал как нам передавать алиасы, такчто пункт 6 уже определён. Они будут передаваться в файлах типа .elib Структура этих файлов будет простая:
Код: Выделить всё
[идентификатор формата][размер общего заголовка][общий заголовок - указаны размеры каждого файла, имена файлов и папок и где они находятся, всмысле подпапки итд][файл1][файл2][файл3][файлN]
[user]
Я думаю, не смогу перевести... терпения не хватит %) Надо переводчиков просить...
Кстати если кто из них читает эту тему, переведите заголовочный пост если не сложно %)
-
- Разработчик
- Сообщения: 302
- Зарегистрирован: 17.03.2008
- Откуда: такие как я?
- Поблагодарили: 2 раза
- Контактная информация:
MOZGIII
всё уже до тебя придумано, всё что надо это хороший класс на C++ каторый читает и врайтит гцф фаилы и класс для управления пирами (p2p) а там дело за малым
первое можно украсть в цфтулбокс, в второе вытащить из первых версий мула
всё уже до тебя придумано, всё что надо это хороший класс на C++ каторый читает и врайтит гцф фаилы и класс для управления пирами (p2p) а там дело за малым
первое можно украсть в цфтулбокс, в второе вытащить из первых версий мула
Я предпочту ДЦ... ибо.... удобно. и оперативней в итоге чем торрент.
DarkSteam R.I.P.
SilverSteam is less so
SilverSteam is less so
- nALLITeT
- Полковник
- Сообщения: 2560
- Зарегистрирован: 01.08.2008
- Откуда: 127.0.0.1
- Поблагодарили: 2 раза
- Контактная информация:
nALLITeT писал(а):можно из украденых исходников ( в 2003 году ) портировать код TrackerNet Server и TrackerNet Client.
Он вроде бы как стим позволяет выбрать файлы для скачки ( ну как в стиме, тоесть отличная вещь для размещения )
Добавлено спустя 1 час 58 минут 23 секунды:
у меня есть сервер ( правда мой, домашний... )
http://zombie-mk.servegame.org/
-
- Разработчик
- Сообщения: 302
- Зарегистрирован: 17.03.2008
- Откуда: такие как я?
- Поблагодарили: 2 раза
- Контактная информация:
хех)) ну и как работает? может мне попробовать доделать его)у меня есть сервер ( правда мой, домашний... )
http://zombie-mk.servegame.org/