IPB

Здравствуйте, гость ( Вход | Регистрация )

3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> Лобби-сервер для HotA, обсуждение разработки
baratorch
сообщение 27 Jan 2017, 18:00 (Сообщение отредактировал baratorch - 22 Feb 2017, 13:15)
Сообщение #1

Immortal
Сообщений: 2 332
Спасибо сказали: 4509 раз




Давным давно востребованная вещь: лобби сервер для онлайн игры в героев.
Чтобы можно было коннектиться без всяких хамачей и прочего.
Чтобы можно было легко искать оппонента.
Общие рейтинг, чат, и прочие вещи, которые являются обыденностью для современных многопользовательских игр.

И я очень хочу этим заняться, но мне катастрофически не хватает знаний и опыта для разработки сего.


--------------------
HoMM 3 HD:
http://sites.google.com/site/heroes3hd
последняя версия - 3.61f
Go to the top of the pageAdd Nick
 
+Quote Post
t800
сообщение 27 Jan 2017, 20:23 (Сообщение отредактировал t800 - 27 Jan 2017, 20:24)
Сообщение #2

Разработчик
Сообщений: 513
Спасибо сказали: 192 раза




А прочему вам просто не взять исходники Хамачи и не сделать на них свой сервер?

ЗЫ Вот загуглил "hamachi open source" тут же нашел кучу всяких серверов с исходниками https://habrahabr.ru/post/150151/


--------------------


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
SaintDark
сообщение 28 Jan 2017, 04:23 (Сообщение отредактировал SaintDark - 28 Jan 2017, 04:27)
Сообщение #3

Working hard
Сообщений: 443
Спасибо сказали: 526 раз




Оригинальное лобби героев разве TCP? Для игр в рнжиме онлайн актуально UDP, т.к. игра не зависает при потере пакетов.

p2p через сервер видится так: Игроки логинятся, получают токены сессий и на основе этих токенов за ними закрепляется адрес вида token.hlobby.com, и они подключаются друг к другу уже посредством этих адресов (что- то вроде vpn выходит). Такой способ гарантирует подключение двух пользователей независимо от того, белые ip у них или нет.


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
baratorch
сообщение 28 Jan 2017, 05:01
Сообщение #4

Immortal
Сообщений: 2 332
Спасибо сказали: 4509 раз




Цитата(SaintDark @ 28 Jan 2017, 06:23) *
Оригинальное лобби героев разве TCP? Для игр в режиме онлайн актуально UDP, т.к. игра не зависает при потере пакетов.

UDP актуален для реал тайм игр, шутанов всяких. Где скорость обмена данными важнеe целостности данных и гарантии доставки.
Героям это не нужно им как раз нужна гарантия доставки и целостности, т.е. Один игрок должен 100% получать то что отправил другой и никак иначе.
Как вы представляете себе шахматы в которых ход соперника может не дойти до вас или дойти не таким, каким его сделал игрок?
Если инет медленный и глючный, то пускай на передачу данных уйдет сколь угодно много времени (до установленного таймаута), но они обязаны дойти 100% целостными.
UDP же не гарантирует целостность и вообще доставку данных. а TCP гарантирует - в этом разница, я так понимаю.

Оригинальный сетевой API использованный в героях предполагает отправку данных как с гарантией доставки, так и без. Но практически используется только вариант с гарантией - по факту это tcp


--------------------
HoMM 3 HD:
http://sites.google.com/site/heroes3hd
последняя версия - 3.61f


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
t800
сообщение 28 Jan 2017, 07:32 (Сообщение отредактировал t800 - 28 Jan 2017, 08:04)
Сообщение #5

Разработчик
Сообщений: 513
Спасибо сказали: 192 раза




Цитата(baratorch @ 28 Jan 2017, 08:01) *
Цитата(SaintDark @ 28 Jan 2017, 06:23) *
Оригинальное лобби героев разве TCP? Для игр в режиме онлайн актуально UDP, т.к. игра не зависает при потере пакетов.

UDP актуален для реал тайм игр, шутанов всяких. Где скорость обмена данными важнеe целостности данных и гарантии доставки.
Героям это не нужно им как раз нужна гарантия доставки и целостности, т.е. Один игрок должен 100% получать то что отправил другой и никак иначе.
Как вы представляете себе шахматы в которых ход соперника может не дойти до вас или дойти не таким, каким его сделал игрок?
Если инет медленный и глючный, то пускай на передачу данных уйдет сколь угодно много времени (до установленного таймаута), но они обязаны дойти 100% целостными.
UDP же не гарантирует целостность и вообще доставку данных. а TCP гарантирует - в этом разница, я так понимаю.

Оригинальный сетевой API использованный в героях предполагает отправку данных как с гарантией доставки, так и без. Но практически используется только вариант с гарантией - по факту это tcp



А мне вот кажется как это сделано в Heroes3 это слишком сложно, потому что надо ставить Хамачи и какие-то старые протоколы и все такое. По моему проще вырезать все это дело совсем (забить NOP-ами) и сделать внешнений вызов curl-а и выгрузку мира в фалик и пусть curl его послылает на сайт с каким-нибудь именем а другой игрок его оттуда тоже curl-ом из игры в свой ход скачивает и загружает. И тогда нужен будет только интернет и все.


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
the_new_pirate
сообщение 28 Jan 2017, 11:08 (Сообщение отредактировал the_new_pirate - 28 Jan 2017, 11:12)
Сообщение #6

Power Member
Сообщений: 197
Спасибо сказали: 110 раз




Ооо это крутая вещь была бы. Голосую обеими руками и ногами.
И да, UDP именно для такой игры незачем, TCP рулит.

> Оригинальное лобби героев разве TCP? Для игр в рнжиме онлайн актуально UDP, т.к. игра не зависает при потере пакетов.
Зависание здесь не при чём.
UDP — любой пакет может не долететь или долететь повреждённым(в этом самая большая проблема), игра должна сама иметь логику для обработки таких ситуаций. Но выше возможности по достижению очень маленьких задержек.
TCP — либо пакеты долетают (автоматически пересылаются если надо), либо на уровне апи будет очевидный сигнал о "разрыве". Для игры это обрабатывать проще.

Сервер на C и тем более C++ мне видится адской затеей, потому что писать безопасный код на этих языках очень сложно и даже самые крутые прогеры создают уязвимости.

По описанию похоже, что это просто что-то типа VPN с плюшками, в таком случае можно и на Python сделать в принципе — взять OpenVPN + наколбасить регистрацию, по паролю выдавать сертификаты для подключения к впн, которые клиент уже будет использовать.

Цитата(t800 @ 28 Jan 2017, 08:32) *
А мне вот кажется как это сделано в Heroes3 это слишком сложно, потому что надо ставить Хамачи и какие-то старые протоколы и все такое. По моему проще вырезать все это дело совсем (забить NOP-ами) и сделать внешнений вызов curl-а и выгрузку мира в фалик и пусть curl его послылает на сайт с каким-нибудь именем а другой игрок его оттуда тоже curl-ом из игры в свой ход скачивает и загружает. И тогда нужен будет только интернет и все.

По такому описанию, это будет жутко неэффективно во время PvP битв.
Go to the top of the pageAdd Nick
 
+Quote Post
t800
сообщение 28 Jan 2017, 12:22
Сообщение #7

Разработчик
Сообщений: 513
Спасибо сказали: 192 раза




Цитата(the_new_pirate @ 28 Jan 2017, 14:08) *
Цитата(t800 @ 28 Jan 2017, 08:32) *
А мне вот кажется как это сделано в Heroes3 это слишком сложно, потому что надо ставить Хамачи и какие-то старые протоколы и все такое. По моему проще вырезать все это дело совсем (забить NOP-ами) и сделать внешнений вызов curl-а и выгрузку мира в фалик и пусть curl его послылает на сайт с каким-нибудь именем а другой игрок его оттуда тоже curl-ом из игры в свой ход скачивает и загружает. И тогда нужен будет только интернет и все.

По такому описанию, это будет жутко неэффективно во время PvP битв.


Почему не эффективно? Для битвы путь curl отправляет и скачивает другой файлик в котором состояние битвы.
ИМХО как раз все напротив очень хорошо все будет потому что можно будет даже сейвы в самой битве делать! Сегодня сохранть а завтра продолжить с того же хода.


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
the_new_pirate
сообщение 29 Jan 2017, 09:28
Сообщение #8

Power Member
Сообщений: 197
Спасибо сказали: 110 раз




а, ну если это не весь мир будет, а только то, что касается битвы, то ещё может взлететь.
Go to the top of the pageAdd Nick
 
+Quote Post
baratorch
сообщение 29 Jan 2017, 11:39 (Сообщение отредактировал baratorch - 29 Jan 2017, 11:44)
Сообщение #9

Immortal
Сообщений: 2 332
Спасибо сказали: 4509 раз




Цитата(t800 @ 28 Jan 2017, 09:32) *
А мне вот кажется как это сделано в Heroes3 это слишком сложно, потому что надо ставить Хамачи и какие-то старые протоколы и все такое. По моему проще вырезать все это дело совсем (забить NOP-ами) и сделать внешнений вызов curl-а и выгрузку мира в фалик и пусть curl его послылает на сайт с каким-нибудь именем а другой игрок его оттуда тоже curl-ом из игры в свой ход скачивает и загружает. И тогда нужен будет только интернет и все.

Во-первых, это плохое решение. Думаю, так будет вообще невозможно сделать.
Как узнавать что противник ход завершил? как именовать файл чтобы он точно поступал адресату при нескольких одновременных играх?
Как реализовать то что противник реалтайм видит перемещения героев оппонента?
В общем, извини, но бред.
Разве что под эту идею можно скрипты написать чтобы они сейвили хот сит игру, отправляли сейв, а затем скачивали его и загружали. Но это же тоже довольно тормозное и уродское решение. Уж лучше один раз поставить и настроить хамачи/тангл/тимвьюер/геймренджер и играть нормально.

Цитата
Почему не эффективно? Для битвы путь curl отправляет и скачивает другой файлик в котором состояние битвы.
ИМХО как раз все напротив очень хорошо все будет потому что можно будет даже сейвы в самой битве делать! Сегодня сохранть а завтра продолжить с того же хода.


Во вторых это сложное решение, ибо в игре мир посылается один раз - в начале/при загрузке игры. Дальше игроки обмениваются изменениями. В битве - только действиями. Что в общем то предельно разумно. Было бы странно, если б было иначе.


--------------------
HoMM 3 HD:
http://sites.google.com/site/heroes3hd
последняя версия - 3.61f
Go to the top of the pageAdd Nick
 
+Quote Post
t800
сообщение 29 Jan 2017, 16:41 (Сообщение отредактировал t800 - 29 Jan 2017, 16:57)
Сообщение #10

Разработчик
Сообщений: 513
Спасибо сказали: 192 раза




Цитата
Во-первых, это плохое решение. Думаю, так будет вообще невозможно сделать.


Цитата
Как узнавать что противник ход завершил?


Сделать lock файлик


Цитата
как именовать файл чтобы он точно поступал адресату при нескольких одновременных играх?


Путь берут файлы из разных каталогов


Цитата
Как реализовать то что противник реалтайм видит перемещения героев оппонента?


А он их видит реалтайм? Я почему то думал что он их видит когда тот ход завершил уже.


Цитата
В общем, извини, но бред.


Ну не знаю. Я просто думаю что так проще просто все вырезать и сделать вызов готовой внешней программы и пусть она сама обмениватся файликами. Например curl он все может и логинится и файлы отравлять и получать и сообщения посылать и почту. А в файлы это можно записать и команды и мир и все что хочешь. И не нужно будет людям ставить никакие протоколы и делать непонятные VPN.


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
Spartak
сообщение 29 Jan 2017, 23:42
Сообщение #11

FFuck_oFF
Сообщений: 3 830
Спасибо сказали: 963 раза




Цитата(t800 @ 29 Jan 2017, 16:41) *
Цитата
Как реализовать то что противник реалтайм видит перемещения героев оппонента?

А он их видит реалтайм? Я почему то думал что он их видит когда тот ход завершил уже.
Одновременные ходы для Хоты.


--------------------
http://heroes3towns.com/ Сайт Новых Городов


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
hippocamus
сообщение 30 Jan 2017, 00:04
Сообщение #12

Мяў, наверное...
Сообщений: 21 050
Спасибо сказали: 9555 раз




t800, ну пойми уже, что всё реально гораздо сложнее, чем кажется!
(Да, когда-то мы с Арсением и Бизиком разрабатывали проект Русских героев, типа VCMI - и нам казалось это всё вполне реальным. Когда тебе 28, и нет семьи - или уже 38, и трое - мал мала меньше - совершенно разное отношение к проблеме).


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
t800
сообщение 30 Jan 2017, 04:50 (Сообщение отредактировал t800 - 30 Jan 2017, 04:51)
Сообщение #13

Разработчик
Сообщений: 513
Спасибо сказали: 192 раза




Цитата(hippocamus @ 30 Jan 2017, 03:04) *
t800, ну пойми уже, что всё реально гораздо сложнее, чем кажется!
(Да, когда-то мы с Арсением и Бизиком разрабатывали проект Русских героев, типа VCMI - и нам казалось это всё вполне реальным. Когда тебе 28, и нет семьи - или уже 38, и трое - мал мала меньше - совершенно разное отношение к проблеме).


А как в VCMI сетевая игра сделана? Разве тоже через старые протоколы, хамачи и VPN?


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
SaintDark
сообщение 30 Jan 2017, 06:16
Сообщение #14

Working hard
Сообщений: 443
Спасибо сказали: 526 раз




Можно поточнее, что будет отсылаться на сервер с клиента, и что сервер должен отсылать клиентам?


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
baratorch
сообщение 30 Jan 2017, 07:42 (Сообщение отредактировал baratorch - 30 Jan 2017, 07:46)
Сообщение #15

Immortal
Сообщений: 2 332
Спасибо сказали: 4509 раз




Цитата(SaintDark @ 30 Jan 2017, 08:16) *
Можно поточнее, что будет отсылаться на сервер с клиента, и что сервер должен отсылать клиентам?

с клиента например информацию о победе/поражении в партии, из которой будет формироваться рейтинг.
информация меняющая статус игрока: играет сейчас/нет.

С сервера на клиент: игроки в сети, статус игроков: играет сейчас/нет, рейтинг игроков, ну и информация для p2p соединения.

И чат же через сервер работать будет.


***

Немного поизучав вопрос, я понял что для меня проблемой номер 1 является осуществление p2p (пробивания NAT там всякие... )

Если делать передачу игровых данных не p2p а через сервер, то такое, наверное и я написать смогу. Только это плохой вариант.
При p2p можно будет обойтись самым слабеньким(дешевым) сервером(хостингом).


--------------------
HoMM 3 HD:
http://sites.google.com/site/heroes3hd
последняя версия - 3.61f


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
tolich
сообщение 30 Jan 2017, 08:24
Сообщение #16

Невыносимый
Сообщений: 13 344
Спасибо сказали: 24779 раз




Другими словами, Heavenly Conflux.


--------------------
Саурону, Саруману можно верить только спьяну!

*


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
SAG19330184
сообщение 01 Feb 2017, 18:40
Сообщение #17

Организатор лиги WCL
Сообщений: 978
Спасибо сказали: 629 раз




Цитата(t800 @ 29 Jan 2017, 16:41) *
Цитата
Как реализовать то что противник реалтайм видит перемещения героев оппонента?


А он их видит реалтайм? Я почему то думал что он их видит когда тот ход завершил уже.

противник видит перемещения вражеских героев реалтайм


--------------------
Постоянно играю на рейтинг www.heroes-III.com в онлайне через сервер GameRanger - в HoMM3 SOD или WT. Присоединяйтесь! Чужие подписи и аватары не читаю - отключил
Go to the top of the pageAdd Nick
 
+Quote Post
the_new_pirate
сообщение 01 Feb 2017, 21:36
Сообщение #18

Power Member
Сообщений: 197
Спасибо сказали: 110 раз




Цитата(baratorch @ 30 Jan 2017, 07:42) *
Немного поизучав вопрос, я понял что для меня проблемой номер 1 является осуществление p2p (пробивания NAT там всякие... )

Если делать передачу игровых данных не p2p а через сервер, то такое, наверное и я написать смогу. Только это плохой вариант.
При p2p можно будет обойтись самым слабеньким(дешевым) сервером(хостингом).

ну текущий вариант (хамачи) — это тоже через сервер всё идёт (vpn же)
кстати если сервер будет чисто под героев, то думаю, что самый дешёвый VPS на каком-нибудь дигиталокеан вполне прокатит, учитывая популярность игры.
сделать пробивание NAT — это было бы круто, только если честно я даже не особо смог понять, как это работает, для моего тупого мозга это какая-то магия.

кстати, можно же ещё сделать передачу данных поверх какого-нибудь реалтаймового мессенжера (XMPP?), учитывая объём данных, может прокатить. тогда используются ресурсы произвольных XMPP серверов, и нет проблем с NATом и платой за сервер.
Go to the top of the pageAdd Nick
 
+Quote Post
SaintDark
сообщение 02 Feb 2017, 12:08 (Сообщение отредактировал SaintDark - 02 Feb 2017, 12:08)
Сообщение #19

Working hard
Сообщений: 443
Спасибо сказали: 526 раз




В общем, почитал про пробивание NAT.

Делается это с помощью STUN сервера или аналога.
Действующие лица: Клиент1, Клиент2, Сервер

Принцип: Клиент1 и Клиент2 подключаются к серверу и сообщают ему свои внешний IP и порт. Далее, клиентам рассылается информация друг о друге (внешние IP адреса и порты, через которые они вышли во внешку) и уже непосредственно общаются друг с другом на основе этих данных.

Минусы: Со свистками не работает. С симметричным NAT (где на каждое подключение свой порт) тоже не работает, но он встречается редко, в основном провайдеры используют конусный (один порт на кучу подключений).

Оптимальным решением будет поднятие VPN сервера и автоматизация генерации сертификатов, автоматизация подключения клиента по паре логин/пароль (хотя допустимо подключаться просто по паролю, но нам надо как-то идентифицировать пользователя для себя, рейтинги и тд.), и трафик будет идти через сервер, в зашифрованном и сжатом виде. Как вариант, можно замерить количество пакетов в секунду, отправляемые с клиента на vpn сервер при непосредственной игре, и уже после этого смотреть на требовательность к пропускной способности сервера, т.к, возможно, может много и не потребоваться. Зато будет работать с любыми видами подключений, и p2p намного проще организовать.


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
t800
сообщение 04 Feb 2017, 08:42 (Сообщение отредактировал t800 - 04 Feb 2017, 10:12)
Сообщение #20

Разработчик
Сообщений: 513
Спасибо сказали: 192 раза




Цитата(SaintDark @ 02 Feb 2017, 15:08) *
Оптимальным решением будет поднятие VPN сервера и автоматизация генерации сертификатов, автоматизация подключения клиента по паре логин/пароль (хотя допустимо подключаться просто по паролю, но нам надо как-то идентифицировать пользователя для себя, рейтинги и тд.), и трафик будет идти через сервер, в зашифрованном и сжатом виде. Как вариант, можно замерить количество пакетов в секунду, отправляемые с клиента на vpn сервер при непосредственной игре, и уже после этого смотреть на требовательность к пропускной способности сервера, т.к, возможно, может много и не потребоваться. Зато будет работать с любыми видами подключений, и p2p намного проще организовать.


По моему принимать файлики с сейвами сайту будет легче чем весь трафик.

ЗЫ И еще. Если сделать сайт чтобы он принимал и давал скачивать файлики то тогда можно будет попробовать сделать чтобы игроки которые играют сейчас на Android во Free Heroes 2 (T-800 mod) тоже могли играть через этот же сайт потому, что отправлять и получать файлики на SDL это не очень трудно сделать (чтоб сейвы отправлялись по почте я уже почти сделал - осталось только в игру вставить) и поэтому было бы здорово если на одном сайте люди могли бы играть и в Тройку и в Двойку тоже.


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post

3 страниц V   1 2 3 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 15 August 2018 - 12:37
Copyright by Алексей Крючков
Strategy Gamez by GrayMage
Programming by Degtyarev Dmitry
  Яндекс.Метрика