Суббота, 30 Ноября 2024, 12:16

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Клиент-сервера?
daunДата: Четверг, 16 Февраля 2012, 12:05 | Сообщение # 1
постоянный участник
Сейчас нет на сайте
Играя на клиентах (особенно корейских), меня не покидает подозрение,
что сервером для комнаты является клиент главного по комнате.
Меняется главный, меняются лаги и задержка.
"Игра остановлена, обрыв подключения лидера команды"

Интересно, такая система возможна в принципе, клиенты комнаты получили данные с главного сервера о соседних, и ушли, при старте в автономную игру на 10 чел?

Или вообще, клиент-сервера без главного сервера, просто и не хлопотно. cool
SoWaДата: Четверг, 16 Февраля 2012, 13:05 | Сообщение # 2
частый гость
Сейчас нет на сайте
p2p и никакой магии. Такая схема существует и имеет право на жизнь.
Главный сервер нужен - хранить ту же статистику. Если сложная архитектура - маршрутами управлять.


ActionScript-программист. Так же Flash Media Server, C#, PHP. Рисовать не умею и не люблю.
Ищу проект, желательно где есть грамотный менеджер, дизайнер и художник.
daunДата: Четверг, 16 Февраля 2012, 14:01 | Сообщение # 3
постоянный участник
Сейчас нет на сайте
Quote (SoWa)
p2p и никакой магии

Спасибо SoWa, погуглил p2p, буду разбираться.

"Несмотря на то, что в феврале 2006 прекратил работу самый популярный сервер... , и была прекращена разработка клиента...
сама сеть продолжает функционировать, т. к. не завязана на конкретные серверы и существует большое количество
свободно распространяемых клиентских программ."
anton-garДата: Четверг, 16 Февраля 2012, 16:24 | Сообщение # 4
WEBmaster
Сейчас нет на сайте
Вот урок p2p - создание чата.

daunДата: Четверг, 16 Февраля 2012, 19:20 | Сообщение # 5
постоянный участник
Сейчас нет на сайте
Quote (anton-gar)
Вот урок p2p - создание чата.

Не, это ac3, его уже пробовал, не пошло, вялый он кокой-то, еще)
anton-garДата: Четверг, 16 Февраля 2012, 20:31 | Сообщение # 6
WEBmaster
Сейчас нет на сайте
Quote (daun)
вялый он кокой-то, еще)


???
Как по мне, так замечательный, почему вялый?


daunДата: Четверг, 16 Февраля 2012, 22:02 | Сообщение # 7
постоянный участник
Сейчас нет на сайте
Quote (anton-gar)
Как по мне, так замечательный, почему вялый?

Для небольших проектов удобный, в плане анимации ваще идеален.
Но запас скорости маленький, вместо того чтобы задумку воплощать, постоянно занимаешься оптимизацией.
Вроде вектор, а приходится растр использовать.
anton-garДата: Четверг, 16 Февраля 2012, 22:11 | Сообщение # 8
WEBmaster
Сейчас нет на сайте
Quote (daun)
Но запас скорости маленький, вместо того чтобы задумку воплощать, постоянно занимаешься оптимизацией.
Вроде вектор, а приходится растр использовать.


Это - да!


daunДата: Пятница, 17 Февраля 2012, 17:03 | Сообщение # 9
постоянный участник
Сейчас нет на сайте
Интересная схема нарисовалась.

Первый заходит на сайт игры, качает и запускает клиент.
Клиент обращается к базе сайта, там пусто, значит, и в клиенте нет комнат, первый жмет "создать комнату".
В базе появляется первая запись с донными этого клиента, теперь он сервер, он в своей комнате, может играть с ботами.

Второй заходит на сайт игры, качает и запускает клиент.
Клиент обращается к базе сайта, там одна запись с данными первого (добавляются данные второго),
второй жмет "войти в комнату", (может создать свою комнату).
Клиент второго подключается к первому.

Входит третий. Второй выходит, клиент второго обращается к базе сайта и его запись удаляется. При переходе в другую комнату, перезапись.

Сайт не нагружен. Клиенты, при ограниченности комнаты, тоже не нагружены. Общих участников может быть много.

Теперь можно поэкспериментировать:
Взаимодействие клиента с php скриптом сайта и клиентов друг с другом. biggrin
TimKruzДата: Пятница, 17 Февраля 2012, 18:03 | Сообщение # 10
старожил
Сейчас нет на сайте
Quote (daun)
Второй выходит, клиент второго обращается к базе сайта и его запись удаляется.

Но если второй "вылетит", например, из-за разрыва связи с сетью, - его запись останется на сервере. Тут его запись должны удалить те клиенты, которые остались в комнате. А если он был один в комнате, то кто будет удалять? Логично, что тот, кто первым попытается войти в его комнату, которой уже нет... Однако до этого момента она будет в списке на сервере, и это плохо...
Это я так, дополняю...

Quote (daun)
Клиенты, при ограниченности комнаты, тоже не нагружены.

Я предлагаю такую схему (давно её придумал, очередной велосипед): клиенты обмениваются пакетами информации по кругу, типа 1>2>3>...>1, при этом каждый добавляет что-то своё (старые части отбрасываются). При этом клиенту нужно знать порядок клиентов в сети (например, имена игроков по алфавиту). Сам список игроков в комнате принимать с мастер-сервера. Пример подключения и отключения:

Правда, тут ограничение из-за того, что чем больше клиентов - тем больше нарастает пакет данных.
Можно ещё сделать так, чтобы каждый отправлял всем сразу, но тут будет слишком много подключений, хотя пакеты маленькие.
Можно делать один клиент основным, но тогда на него сильно возрастёт нагрузка.


daunДата: Пятница, 17 Февраля 2012, 19:33 | Сообщение # 11
постоянный участник
Сейчас нет на сайте
Quote (TimKruz)
Но если второй "вылетит", например, из-за разрыва связи с сетью, - его запись останется на сервере.

Есть такой момент, к сожалению, мертвые комнаты в рабочих играх, часто встречаются.

Quote (TimKruz)
клиенты обмениваются пакетами информации по кругу

Для динамических игр, такая схема вряд ли подойдет, задержка сигнала, отставание от реальности.

Quote (TimKruz)
Можно ещё сделать так, чтобы каждый отправлял всем сразу, но тут будет слишком много подключений, хотя пакеты маленькие. Можно делать один клиент основным, но тогда на него сильно возрастёт нагрузка.

Вот как раз с этим и непонятки.
TimKruzДата: Пятница, 17 Февраля 2012, 20:29 | Сообщение # 12
старожил
Сейчас нет на сайте
Quote (daun)
Для динамических игр, такая схема вряд ли подойдет, задержка сигнала, отставание от реальности.

Ну, это вряд ли. Если, например, передавать только положение игрока (по 4 байта на координату) - это быстро. Тем более, что все клиенты осуществляют приём-передачу одновременно, т.е. когда 1-й передаёт свой пакет 2-ому, 2-й уже передаёт свой пакет 3-ему. А "отставание от реальности" будет всегда и в любой схеме.
Quote (daun)
Вот как раз с этим и непонятки.

Я немного ошибся: отправлять всем сразу не в том смысле, что одновременно, а по-очереди. Т.е. клиент №1 сделал шаг вперёд, и хочет сообщить об этом всем. Он по-очереди отправляет это 2-ому, 3-ему, и так далее, пока не отправит всем. Т.е. работает как сервер в обычных клиент-серверных играх. Но остальные-то тоже так делают.
Вот и получается (для сравнения):

Но я могу и ошибаться, это только теоретические соображения... На практике, возможно, это будет работать как-то иначе... Или оптимизировать можно...

А для случая
Quote (TimKruz)
Можно делать один клиент основным, но тогда на него сильно возрастёт нагрузка.

есть другая проблема: один из клиентов фактически становится сервером, и, если он выйдет, клиенты должны "поймать" момент так, чтобы кто-то из оставшихся взял управление комнатой "в свои руки". Мне кажется, сделать этот переход плавно - довольно сложно. Да и вообще, клиент, ставший сервером, будет испытавать нагрузку, а остальные будут играть "налегке" - это немного нечестно.


daunДата: Пятница, 17 Февраля 2012, 23:21 | Сообщение # 13
постоянный участник
Сейчас нет на сайте
Quote (TimKruz)
Если, например, передавать только положение игрока (по 4 байта на координату) - это быстро

Когда в первый раз слепил связку сервер - клиент и замерил трафик, офигел, передаю 5 байтов, размер пакета в Kb. Куча протоколов и уровней.

Quote (TimKruz)
когда 1-й передаёт свой пакет 2-ому, 2-й уже передаёт свой пакет 3-ему

1, 3, 5 - Магадан 2, 4, 6 - Украина )

Quote (TimKruz)
отправлять всем сразу не в том смысле, что одновременно, а по-очереди

Не знаю, хорошо бы один пакет для всех игроков, было бы идеально, но возможно ли такое.

Quote (TimKruz)
один из клиентов фактически становится сервером, и, если он выйдет, клиенты должны "поймать" момент так, чтобы кто-то из оставшихся взял управление комнатой "в свои руки". Мне кажется, сделать этот переход плавно - довольно сложно.

Если главный отвалится, всех сразу раскидает, момент непредсказуем.
В круговой схеме, риск еще больше.

Quote (TimKruz)
Да и вообще, клиент, ставший сервером, будет испытавать нагрузку, а остальные будут играть "налегке" - это немного нечестно.

Не думаю, что обработка с десяток клиентов будет сильно заметна.
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг