Как написать серверную часть под unity?

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Как написать серверную часть под unity?

Сообщение Zimaell 12 июл 2020, 18:30

Подскажите статьи о том как сделать серверную часть под unity, на PHP (хоть и хорошо знаком) как я понял не вариант если конечно игра не пошаговая, пошаговую пробовал, получается, но с динамикой не пойдет...
Думаю C# (немного знаком), хотя многие на форумах пишут что лучший вариант node.js+socket.io... (пока что не знаком)
Конечно хотелось бы почитать полные примеры от начала и до теста, как что куда и т.д.
Интересуют любые полезные статьи и примеры по моему вопросу...

Photon немного так изучил, но мне не нравится во первых то что я не вижу что там на сервере происходит, во вторых мне нужно на сервере сохранять данные о том что сейчас происходит на сцене, не хотелось бы использовать фотон и отдельно на сервер с PHP отправлять данные которые записываются в БД, плюс ограничения по онлайну (при разработке то ничего а потом)...

В общем пришел к выводу что лучше писать серверную часть свою и использовать свой сервер, конечно это будет дольше, но никаких ограничений и все свое...
Zimaell
UNIверсал
 
Сообщения: 474
Зарегистрирован: 04 июл 2020, 18:45

Re: Как написать серверную часть под unity?

Сообщение Jarico 12 июл 2020, 23:06

Сервер можешь начиркать на UDP или TCP протоколе, они доступны во многих языках.

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

https://metanit.com/sharp/net/5.1.php

TCP - пустил кораблик по ручью, а друг ждёт его в конце ручья. Когда кораблик приплывёт друг тебе скажет что кораблик приплыл (немного медленнее, надёжный)

https://metanit.com/sharp/net/4.1.php
Github: _https://github.com/redheadgektor
Discord: Конь! Чаю!#9382 (сижу редко)
YouTube: _https://www.youtube.com/channel/UCPQ04Xpbbw2uGc1gsZtO3HQ
Telegram: _https://t.me/redheadgektor
Аватара пользователя
Jarico
Адепт
 
Сообщения: 1084
Зарегистрирован: 06 янв 2019, 17:37
Откуда: 0xDEAD
Skype: none
  • Сайт

Re: Как написать серверную часть под unity?

Сообщение seaman 13 июл 2020, 17:38

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

Re: Как написать серверную часть под unity?

Сообщение Zimaell 13 июл 2020, 21:15

seaman писал(а):Тебе уже писали какие есть другие решения. Хочешь свое -дерзай. Только вот если не разобрался с Фотоном - сможешь ли свой сервер написать? Как-то не верится.

Да с фотоном более менее я разобрался, мне их рамки и цены не нравятся, плюс то что я не могу самим сервером управлять...
Просто задумка такая - бой в стиле TD происходит между игроками, все просчеты будут выполнятся на сервере и сразу же записываться и отправляться игрокам, в плане того что если кто-то отвалился или сдался все последствия боя оставались.
По сути мне нужно сделать следующее - при начале боя игроков, в отдельную таблицу загружаются все их данные (юниты, статы, координаты и т.д.), скрипт начинает просчитывать бой и отправляет игрокам что должно произойти следующее 10 сек, потом снова отправляет следующее 10 сек (к примеру), и все это сразу же записывается в бд, или что-то подобное, сейчас тестирую пробую что вообще может получится и как.
Вот как-то так я это вижу, думаю с такой схемой лучше написать свое решение, так как готовые не совсем подходят...
Zimaell
UNIверсал
 
Сообщения: 474
Зарегистрирован: 04 июл 2020, 18:45

Re: Как написать серверную часть под unity?

Сообщение krauser0993 14 июл 2020, 04:48

Да с фотоном более менее я разобрался, мне их рамки и цены не нравятся, плюс то что я не могу самим сервером управлять...
Просто задумка такая - бой в стиле TD происходит между игроками, все просчеты будут выполнятся на сервере и сразу же записываться и отправляться игрокам, в плане того что если кто-то отвалился или сдался все последствия боя оставались.
По сути мне нужно сделать следующее - при начале боя игроков, в отдельную таблицу загружаются все их данные (юниты, статы, координаты и т.д.), скрипт начинает просчитывать бой и отправляет игрокам что должно произойти следующее 10 сек, потом снова отправляет следующее 10 сек (к примеру), и все это сразу же записывается в бд, или что-то подобное, сейчас тестирую пробую что вообще может получится и как.
Вот как-то так я это вижу, думаю с такой схемой лучше написать свое решение, так как готовые не совсем подходят...


Что значит управлять сервером?
Все это можно реализовать через фотон. Если кто-то отвалился есть готовый метод OnPlayerLeftRoom. Там прописываешь что должно произойти
krauser0993
UNITрон
 
Сообщения: 342
Зарегистрирован: 05 апр 2019, 15:17

Re: Как написать серверную часть под unity?

Сообщение ikhtd 14 июл 2020, 10:54

с точки зрения реализации на пхп, если например использовать майскьюль, то не хватит денег содержать сервак, чтоб записывать в базу каждые 10 сек. Там на серваке пойдет нагрузка по оперативе (если 10 сек и хороший онлайн на раздачу) и у кого ты там будешь хоститься, будут тарифы для такой нагрузки недешевые. Приблизительно это будет дедикейтед сервер от 100 баксов в месяц - просто чтоб содержать свою базу майскьюль. Думаю дешевле не получится на такую задачу. Там тоже в серваках надо понимать - если например сервак будет на линухе - тогда может в 100 баксов можно уложиться, а если захочешь сервак на винде - придется еще за лицензионную виндовс платить, будет еще дороже. Винда например может понадобится чтоб запустить на дедике какой то сервер, сделанный на винде, а не на линухе.

В таком случае дешевле всего купить какой-то б/у комп или ноутбук и организовать сервак у себя дома. Для этого например провести еще один кабель интернета со статичным ай пи. Тогда там можно запускать и сервак на винде и вся нагрузка по оперативе будет твоя, бесплатно. Просто что он должен работать 24/7 не выключаясь - тут логичнее брать ноутбук.
Скрытый текст:
Объективная реальность это - что в жизни не может быть более одного пути, который в свою очередь обусловлен максимальным существующим давлением. (второй _ttp://habrahabr.ru/post/202654/)
ikhtd
Адепт
 
Сообщения: 1124
Зарегистрирован: 24 мар 2014, 12:20

Re: Как написать серверную часть под unity?

Сообщение Zimaell 14 июл 2020, 11:19

ikhtd писал(а):с точки зрения реализации на пхп, если например использовать майскьюль, то не хватит денег содержать сервак, чтоб записывать в базу каждые 10 сек. Там на серваке пойдет нагрузка по оперативе (если 10 сек и хороший онлайн на раздачу) и у кого ты там будешь хоститься, будут тарифы для такой нагрузки недешевые. Приблизительно это будет дедикейтед сервер от 100 баксов в месяц - просто чтоб содержать свою базу майскьюль. Думаю дешевле не получится на такую задачу. Там тоже в серваках надо понимать - если например сервак будет на линухе - тогда может в 100 баксов можно уложиться, а если захочешь сервак на винде - придется еще за лицензионную виндовс платить, будет еще дороже. Винда например может понадобится чтоб запустить на дедике какой то сервер, сделанный на винде, а не на линухе.

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


Вот я и думаю на C# делать серверную часть, везде где я читал про PHP говорят что он очень не практичный для таких вещей, в написании легок но в реализации торможен. (хоть и PHP к сожалению гораздо лучше знаю чем C#)

MYSQL на практике нормально и быстро записывает и выдает запросы если количество строк менее 10к и вес менее 10мб (примерно), если больше то работает медленнее, на моем опыте при одинаковой конструкции запросы до 10к записей в таблице обрабатывались примерно 0.02-0.1 сек, более 1млн записей доходило до 1-2 сек (PHP), это без лайков, обычные добавить или заменить запись. Поэтому для каждого боя для быстроты будет создаваться отдельная временная таблица, а при завершении уже данные в общую будут идти, но думаю с C# это будет быстрее чем PHP, по крайней мере так говорят...

Выделенный сервер (Intel® Core™ i7-6700 Quad-Core, RAM: 64 GB DDR4, HDD: 2x 4 TB SATA Enterprise HDD) 40уе (32GB около 24уе), на линьке думаю достаточно...
Zimaell
UNIверсал
 
Сообщения: 474
Зарегистрирован: 04 июл 2020, 18:45

Re: Как написать серверную часть под unity?

Сообщение Zimaell 14 июл 2020, 11:22

Что значит управлять сервером?
Все это можно реализовать через фотон. Если кто-то отвалился есть готовый метод OnPlayerLeftRoom. Там прописываешь что должно произойти

Я писал выше что основное вычисления будут именно на сервере делаться и отправляться пользователям картинка грубо говоря, чтобы они на своих клиентах не могли чего либо "подрисовать".
На фотоне как я понял из одного игрока делается хост, то есть есть вероятность что хостер может влиять на отправку данных и тем самым "читерить"...
Zimaell
UNIверсал
 
Сообщения: 474
Зарегистрирован: 04 июл 2020, 18:45

Re: Как написать серверную часть под unity?

Сообщение ikhtd 14 июл 2020, 11:40

i7 конечно что угодно потянет. я видел еще делают связку c# и SQLlight, там базу интегрируют в сервер. это вроде делали с Mirror - есть бесплатный код на гитхабе. не знаю есть ли там бесплатно интеграция с скьюль лайт - но люди такую связку делали. Mirror в принципе норм сервак - это же расшаренная встроенная сеть юнити или ее подобие, главное есть исходный код и доки какие то. просто вникать в него долго, но может лучше чем свой писать. Usurvival с асет стора написан на мироре и там в сервак встроена база скьль лайт.
Скрытый текст:
Объективная реальность это - что в жизни не может быть более одного пути, который в свою очередь обусловлен максимальным существующим давлением. (второй _ttp://habrahabr.ru/post/202654/)
ikhtd
Адепт
 
Сообщения: 1124
Зарегистрирован: 24 мар 2014, 12:20

Re: Как написать серверную часть под unity?

Сообщение seaman 14 июл 2020, 12:20

я не могу самим сервером управлять

Можешь.
Так что получается, что с Фотоном Вы не разобрались, а хотите свой...
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Как написать серверную часть под unity?

Сообщение Jarico 14 июл 2020, 14:44

Zimaell писал(а):Я писал выше что основное вычисления будут именно на сервере делаться и отправляться пользователям картинка грубо говоря, чтобы они на своих клиентах не могли чего либо "подрисовать".
На фотоне как я понял из одного игрока делается хост, то есть есть вероятность что хостер может влиять на отправку данных и тем самым "читерить"...


Тебе не всё равно ли что будет видеть клиент? Клиент всегда врёт, и серверу пофиг что он видит. Можешь написать логику аналогичную серверной для хоста, разницы ведь никакой не будет за исключением того что если хост выйдет из игры то и игра прекратится. Решается просто, если соединения с хостом нет то роль хоста принимает другой игрок
Github: _https://github.com/redheadgektor
Discord: Конь! Чаю!#9382 (сижу редко)
YouTube: _https://www.youtube.com/channel/UCPQ04Xpbbw2uGc1gsZtO3HQ
Telegram: _https://t.me/redheadgektor
Аватара пользователя
Jarico
Адепт
 
Сообщения: 1084
Зарегистрирован: 06 янв 2019, 17:37
Откуда: 0xDEAD
Skype: none
  • Сайт

Re: Как написать серверную часть под unity?

Сообщение seaman 14 июл 2020, 15:55

Тебе не всё равно ли что будет видеть клиент?

Он до сих пор не понял, что есть два типа сети у Фотона - PUN и RealtimeServer.
Судя по вопросам - ему нужен второй. А он читал только про первый.
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Как написать серверную часть под unity?

Сообщение Zimaell 14 июл 2020, 19:33

seaman писал(а):
Тебе не всё равно ли что будет видеть клиент?

Он до сих пор не понял, что есть два типа сети у Фотона - PUN и RealtimeServer.
Судя по вопросам - ему нужен второй. А он читал только про первый.

Я не спорю что с фотоном я ознакомился поверхностно, при создании appid там есть выбор типа, я выбрал RealtimeServer, прошел так сказать обучение, дошел до того что я запускал 2 окна и 2 игрока бегали в одной комнате...
Может я чего не так понимаю...

Jarico писал(а):Тебе не всё равно ли что будет видеть клиент? Клиент всегда врёт, и серверу пофиг что он видит. Можешь написать логику аналогичную серверной для хоста, разницы ведь никакой не будет за исключением того что если хост выйдет из игры то и игра прекратится. Решается просто, если соединения с хостом нет то роль хоста принимает другой игрок

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

Была (или есть еще) такая игра Ogame в браузерке, так вот там нападающий послал флот и тот может лететь час два а нападающий давно не в сети, обороняющийся тоже, только там весь бой просчитывался за секунду как было нападения, и было видно лишь результат.
Тут почти такая же тема но бой можно будет смотреть, а так же влиять на исход (если в сети), например какой-то отряд пустить по другой ветке, или кого-то отозвать, или там пустить ракету в определенную область коих ограничено.
В общем как-то так...
Zimaell
UNIверсал
 
Сообщения: 474
Зарегистрирован: 04 июл 2020, 18:45

Re: Как написать серверную часть под unity?

Сообщение krauser0993 15 июл 2020, 05:38

Если игрок влияет на исход боя, то расчет перед боем сразу отпадает.
Тогда если игрок вышел, то игра продолжается, 2 игрок просто будет AFK
Если игрок снова входит в игру, то он либо реконектится, либо ждет окончания боя (если нужно сохранить состояние башен). Зачем свой сервер, не пойму
krauser0993
UNITрон
 
Сообщения: 342
Зарегистрирован: 05 апр 2019, 15:17

Re: Как написать серверную часть под unity?

Сообщение Zimaell 15 июл 2020, 12:35

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


ни перед боем, допустим идет колона юнитов по заданной траектории, пушки стоят на определенных местах, скрипт рассчитывает кто где будет через 5 секунд и какая пушка по кому стрельнет, тут игрок к примеру там запускает ракету которая будет лететь к месту, в следующем просчете это учитывается, или там к примеру поднял 10 секундный щит на базе которую атакуют, в общем такого рода влияние, как только игрок что-то нажал тут же на сервер эти данные отправились и внеслись изменения в расчеты. Пока что я просто не знаю на сколько часто можно будет обмениваться данными и при этом записывать их в бд, да и стоит ли записывать, может действительно будет запущен скрипт которые это будет все в реальном времени просчитывать и отправлять а по окончанию уже запись в бд...
Zimaell
UNIверсал
 
Сообщения: 474
Зарегистрирован: 04 июл 2020, 18:45

След.

Вернуться в Почемучка

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

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