Организация обмена для онлайн игры по http

Сеть в Unity3D

Организация обмена для онлайн игры по http

Сообщение ProgerLink 04 дек 2020, 12:04

Друзья, всем привет, выручайте советом!
Опишу свою ситуацию.
И так, давным давно, когда трава была зеленее, решил я освоить Unity для написания своей онлайн игры, при том что ни Unity ни C# не знал и вообще абсолютно все для меня было новым, но я как программист другой области знал что это все решается. Игра карточная, пошаговая, популярная в узких кругах, не суть важно какая, важно что пошаговая и при подборе инструмента для обмена с сервером нужен был надежный инструмент для обмена данными с сервером и клиентами. Тут мне попалась серия уроков про SignalR который среди прочих предлагает в качестве транспорта использовать "новомодный" протокол вэбсокетов, что дает легкую возможность дуплексного обмена (как от клиента к серверу так и в обратном направлении) снижая нагрузку и помимо всего он основан поверх TCP, т.е. обеспечивает гарантированную доставку и порядок пакетов. Это то пакеты, а мои сообщения обмена идут поверх этого всего и управляются уже логикой SignalR, а он не дает гарантии ни на порядок ни на доставку, это я уже потом понял опытным путем. Ну что, пришлось немного ручками организовать очереди сообщений для клиентов с порядковой нумерацией и ответными вызовами от клиента на сервер что сообщение было успешно получено, сервер же пытается периодически повторять отправки пока не получит подтверждение. Это все конечно снизило максимальную скорость обмена, но для моей игры не столь критично, в пошаговой игре скорость обмена не так важна. Еще мне понравилось что в отличии от Фотона тут не потребуется ничего покупать, пиши свой сервер и делай что вздумается.
Дело было сделано, написан сервер на ASP для signalR, арендован VPS у хостера, игра опубликована в GooglePlay. Уже даже собралась своя аудитория поклонников этой игры, люди играют, людям игра нравится.
Но, периодически мне пишут люди что игра долго обменивается сообщениями с сервером, частенько выскакивает "Установка соединения с сервером" посреди игры, да она в основном не успевает по таймауту разорвать соединение, но это все напрягает игроков. Сам я такие тормоза замечаю крайне редко (при том что территориально сервер от меня находится гораздо дальше чем для основной аудитории игроков), от этого мне и сложно смоделировать эти тормоза чтобы понять чем они вызваны.

А теперь ближе к сути поста. Хочу попробовать отойти от SignalR и попробовать написать с использованием простых http запросов, а организацию доставки сообщений ОТ СЕРВЕРА К КЛИЕНТУ придется делать через клиентский polling или longPolling, я так понимаю на низком уровне тут вариантов то больше и нет?!
Если так, то наверняка есть готовые фреймворки для Unity которые позволяют организовать подобное, насколько понял UnityWebRequest не может держать соединение открытым для LongPolling ?!
При это ОЧЕНЬ важным является информирование сервера о том что клиент был отключен - разорвано соединение, как я понимаю никакой магии тут нет, сервер в рамках этого фреймворка должен гдето запоминать у себя последний момент опроса его клиентом и при достижении лимита вызывать event дисконнекта.
Очень прошу Вас направить меня в нужном направлении, посоветуйте что в моем случае сейчас подойдет лучше всего.

Спасибо!!!
ProgerLink
UNец
 
Сообщения: 9
Зарегистрирован: 31 май 2013, 10:58

Re: Организация обмена для онлайн игры по http

Сообщение ProgerLink 04 дек 2020, 12:22

Да, забыл сказать что в том варианте signalR который я нашел адаптированный для Untiy, работоспособным транспортом может быть только websocket, другие не работают.
ProgerLink
UNец
 
Сообщения: 9
Зарегистрирован: 31 май 2013, 10:58

Re: Организация обмена для онлайн игры по http

Сообщение seaman 04 дек 2020, 13:36

А gRPC не пробовал? Вроде это еще одна технология, которую нормально ASP поддерживает.
https://docs.microsoft.com/ru-ru/aspnet ... etcore-5.0

https://habr.com/ru/company/yandex/blog/484068/

Да, сразу напишу - я ее только теоретически знаю. На практике не использовал. Так что как она тут поведет не могу сказать.
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара


Вернуться в Сеть

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3