Войти
ПроектыФорумСобираю команду

Life is Feudal Sandbox MMORPG. Ищем тестировщика. (34 стр)

Страницы: 133 34 35 3642 Следующая »
#495
7:42, 10 окт 2014

TrashCoder
> 49 серверов? - а сколько у вас пользователей в онлайне и зачем их держать в
> одном едином мире?
49 инстансов торка, все это крутится на 4 или 5 физических серверах.

> Кстати а сервера лежат все в одном датацентре для всего "реального" мира или вы
> их по регионам раскидали (Америка-Европа-Азия)?
Все в одном датацентре, даже - в одной стойке.

#496
7:46, 10 окт 2014

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

Я разрабатывал и такую схему, но тут 2 критических минуса (поэтому отказался от такой системы):
1. сложность разработки системы возрастает
2. возрастает пинг от клиента до сервера и обратно, так как пакет будет проходить через дополнительный обработчик, что для ММО очень не желательно
Поэтому сейчас, если игрок находится в зоне пересечения 4 серверов, у него будет 4 подключения (по 1 на игровой инстанс торка/сервер). В случае, если делать такую "игровую прокси", то там было бы достаточно одного.

#497
9:55, 10 окт 2014

bank
Спасибо за разъяснение, совсем не сумбурно, всё четко понятно)

bank
> Когда игрок подходит к территории соседнего сервера, он устанавливает
> GameConnection ко второму серверу

Может же быть такое, что соединение по какой-то причине неуспешно?
Условно, (реальная ситуация может быть иная) - два сервера на разных IP и разных портах. У клиента нет доступа к определенному IP/порту из-за провайдера (бывает такое). Или у клиента интернет слабый/через модем.
Клиент просто не сможет играть в одной из "зон"?

Моё скромное имхо подсказывает, что интернет-соединение клиент-сервер в идеале должно быть одно на всю сессию игры. Если используется массив игровых серверов, в этом случае поможет сервер-прокси для хэндла клиентских соединений (и только, по сути как описывает Sh.Tac. ), который уже сам перенаправляет пакеты на нужный игровой сервер. Такой прокси может выдержать огромное количество соединений, он же по сути ничего не обрабатывает :)

bank
> Когда игрок подходит к территории соседнего сервера, он устанавливает
> GameConnection ко второму серверу (С2), а первый (С1) начинает отсылать
> обновления на второй сервер как "на клиент".

А у клиента есть понятия "ведущий сервер" и "новый как клиент"? Или он отсылает информацию всем? То есть на угловом стыке клиент может держать до 8 соединений?
Ведомый сервер понимает, что подключенный к нему клиент хэндлится другим сервером?

bank
> возрастает пинг от клиента до сервера и обратно
Тут спору нет, чем больше узлов, тем больше пинг.

#498
10:13, 10 окт 2014

Beilus
> чет давно новостей нет... заморозили проект что ли?
Игрушка ровно неделю держалась на первом месте, потом ещё ровно неделю на 5-ом, потом почти моментом скатилась до где-то 20-ого, т.е. почти нулевых продаж.
Видать больше денег на раскрутку пробить не удалось.
И что самое главное, положительных отзывов у игры - 77%, при обычных ~90%, самый низкий среди игр на первой странице, а, возможно, и вообще за всю историю Стима.

TrashCoder
> По моим тестам (со схожим геймплеем - т.е. не вот а вов) 1 средненький физ. сервер (bullet) с 8-ю ядрами справляется c 100к+ пользовательскими объектами.
> Если использовать CUDA + PhysX думаю и до 500к+ можно подтянуть.
Шутишь что ли?
Тут люди ещё даже близко не доросли до того, чтобы использовать GPGPU вычисления, и можно было бы просто одну серверную видеокарту использовать вместо 49 серверов

#499
10:42, 10 окт 2014

Dmitry10
Оно вернулось =)

+ Показать

Оффтоп: я тут благодаря тебе опять в шахматы начал играть, а еще классную игру нашёл - типа шахмат, но имхо интереснее
http://www.catalystgamelabs.com/casual-games/the-duke/

#500
10:43, 10 окт 2014

Dmitry10
Я смотрю, что баня пошла тебе на пользу - по крайней мере в этот раз ты обошелся без мата.

#501
10:56, 10 окт 2014

Mephisto std
> я тут благодаря тебе опять в шахматы начал играть, а еще классную игру нашёл - типа шахмат, но имхо интереснее
Так играл бы в мои, и у меня там в сборнике есть игры поинтереснее и поинтеллектуальнее шахмат - это Го, Бридж и Покер.

bazhenovc
> по крайней мере в этот раз ты обошелся без мата.
Кончай бздить, я ни где здесь не матерился.

#502
10:59, 10 окт 2014

Dmitry10
> Кончай бздить, я ни где здесь не матерился.
Тебя забанили за мат на форуме, не ври нам ;)

#503
11:02, 10 окт 2014

Dmitry10
> Так играл бы в мои, и у меня там в сборнике есть игры поинтереснее и поинтеллектуальнее шахмат - это Го, Бридж и Покер.
Я не очень люблю в такие игры играть на компе, предпочитаю живьём.
Покер на компьютере, имхо, вообще бездуховность - а как же посидеть с виски, сигарами, тревожно пересчитывая стопку фишечек и
пытаясь угадать, кто за столом блефует. Если это убрать, то что в покере останется?)

#504
11:02, 10 окт 2014

bank

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

В случае, если сервер и клиент разделены - то тут все "классически".
На сервере ты выставляешь порт слушать:
setNetPort(28000);
А на клиенте ты говоришь куда подключаться:
%conn = new GameConnection();
%conn.connect("127.0.0.1:28000");

А после этого можно сразу юзать commandToServer('GiantLaserAttack', %laserPosition, 12, "1.0 0.0 0.75 0.9")?

А то у меня чего то он не срабатывает...
Если я код подключения перенесу в один инстанс который слушает и в котором определена функция function serverCmdGiantLaserAttack(%client, %position, %powerLevel, %laserColor) и заменю connect на connectLocal то срабатывает нормально.
Может файрволл заблокировал без уведомления?

#505
11:05, 10 окт 2014

SuperArmor
> Может же быть такое, что соединение по какой-то причине неуспешно?
> Условно, (реальная ситуация может быть иная) - два сервера на разных IP и
> разных портах. У клиента нет доступа к определенному IP/порту из-за провайдера
> (бывает такое). Или у клиента интернет слабый/через модем.
> Клиент просто не сможет играть в одной из "зон"?
Такое возможно, но очень маловероятно, так как сервера находятся в одном адресном диапазоне, и используют "чистые" адреса.
А вообще, если такое произойдет, клиент будет пытаться пере-подключиться, если же не будет, то сервер просто не пустит его туда, куда он не подключен. То же самое, если отвечающий за какой-то регион сервер будет в офлайне (ребут или еще чего), то сервер ведущий сервер отправит сообщение на клиент типа "Территория не доступна", и не пустит его дальше определенной зоны (будет отбрасывать назад).

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

SuperArmor
> Такой прокси может выдержать огромное количество соединений, он же по сути
> ничего не обрабатывает :)
На самом деле - обрабатывает. Он должен будет распарсивать все пакеты (распаковывать), их анализировать - какая часть пакета на какой сервер должна идти, и уже отправлять на нужный. Возможно понадобится и адаптировать "координаты", что в одну сторону, что в другую, так как сервер работает в своих координатах (его центр - это "0 0 0"), и при пересылке координат на другой сервер они автоматически адатпируются под принимающий сервер. На одном координата 2044.f, а на другом это может быть -1044.f к примеру. На клиенте всегда используется координатная система ведущего сервера, и при переключении - весь мир сдвигается (шифтится так сказать - от слова shift)

SuperArmor
> А у клиента есть понятия "ведущий сервер" и "новый как клиент"? Или он отсылает
> информацию всем? То есть на угловом стыке клиент может держать до 8
> соединений?

У клиента есть понятия "Primary Connection", и доп подключения. Клиент отсылает мувы (move actions) на все сервера, чтобы в момент переключения у сервера были все последние данные о том какие клавиши у игрока зажаты. Т.е. если в момент переключения ты подпрыгнул или бежишь - то все эти действия будут корректно отработаны на обоих серверах и на клиент сам момент переключения вообще не замечается.

На угловом, там 4 подключения, по кол-ву серверов.

AAABBB
AAABBB
CCxDDD
CCCDDD

Игрок "х" находится на сервере С - PrimaryConnection, а к серверам A,B,D у него просто доп подключения.
Они же, кстати используются и для отсылки на клиент объектов, которыми управляют данные сервера (другие игроки, мобы).

SuperArmor
> Ведомый сервер понимает, что подключенный к нему клиент хэндлится другим
> сервером?
Естественно! Ему же не надо создавать полноценного персонажа/объект. К моменту когда клиент подключается ко вторичному серверу, на нем уже есть объект игрока от первичного (Ghost), и когда клиент устанавливает соединение, сервер видит что объект уже создан и он просто привязывает одно к другому.

#506
11:10, 10 окт 2014

bazhenovc
> Тебя забанили за мат на форуме, не ври нам ;)
Это написали, что за мат, а на самом деле мате не было.

Mephisto std
> как же посидеть с виски, сигарами, тревожно пересчитывая стопку фишечек
> Если это убрать, то что в покере останется?)
LOL.
Кто же с виски и с сигарами в интеллектуальные игры играет?
Ты же так сразу просрёшь всем в чистую, "пытаясь угадать, кто за столом блефует" :)
Покер, как и Бридж - это игра на нечёткую логику, на расчёты вероятностей, хотя вряд ли, если ты понимаешь вообще, что это такое.

#507
11:13, 10 окт 2014

San4es
> А после этого можно сразу юзать commandToServer('GiantLaserAttack',
> %laserPosition, 12, "1.0 0.0 0.75 0.9")?

сразу после вызова %c.connect() нельзя, так как надо дождаться когда соединение установится физически.
В случае с connectLocal() там идет укороченная процедура подключения, которая напрямую соединяет "клиент" с "сервером", так называемый "short circuit" метод, где физически UDP подключения не происходит, поэтому там за один тик все и подключается в сам момент вызова connectLocal(). Можешь посмотреть в движке метод

DefineEngineMethod( NetConnection, connectLocal, const char*, (),,

что там происходит.

Вообще, тебе надо прописать в скриптах методы

function GameConnection::onConnectionAccepted(%this) - это на клиенте
function GameConnection::onConnect(%this) - это на сервере

и другие.
Посмотри как это реализовано в голом торке, и повтори у себя. И уже после того как подключение будет полностью установлено, можешь отсылать commandToServer() / commantToClient().

Описанные выше 2 метода - это ключевые, после них можно делать все что хочешь.

#508
11:16, 10 окт 2014

bank
> На самом деле - обрабатывает.
В сравнении с основным сервером (с физикой, коллизиями, валидацией действий игроков) это копейки.

Большой вам респект! Если бы все так подробно отвечали на вопросы, эх мечты мечты :)

#509
11:18, 10 окт 2014

bank

San4es
> А после этого можно сразу юзать commandToServer('GiantLaserAttack',
> %laserPosition, 12, "1.0 0.0 0.75 0.9")?
сразу после вызова %c.connect() нельзя, так как надо дождаться когда соединение установится физически.
В случае с connectLocal() там идет укороченная процедура подключения, которая напрямую соединяет "клиент" с "сервером", так называемый "short circuit" метод, где физически UDP подключения не происходит, поэтому там за один тик все и подключается в сам момент вызова connectLocal(). Можешь посмотреть в движке метод

DefineEngineMethod( NetConnection, connectLocal, const char*, (),,
что там происходит.
Вообще, тебе надо прописать в скриптах методы

function GameConnection::onConnectionAccepted(%this) - это на клиенте
function GameConnection::onConnect(%this) - это на сервере
и другие.
Посмотри как это реализовано в голом торке, и повтори у себя. И уже после того как подключение будет полностью установлено, можешь отсылать commandToServer() / commantToClient().
Описанные выше 2 метода - это ключевые, после них можно делать все что хочешь.

Спасибо, братан, я у тебя в долгу!
Сча попробую.

Страницы: 133 34 35 3642 Следующая »
ПроектыФорумСобираю команду

Тема в архиве.