@durnevdanya

Unity — клиент | Node.js + Socket.io + Json — сервер == Возможно и как осуществить?

Всем привет. Сейчас планирую создать проект на юнити. Но до этого делал только одиночные игры. Опыта с серверной частью не было. Прочитав в интернете, выбрал node.js + socket.io для realtime, а для передачи данных типа этого = Json:
(On Game)

Tell Server: Player 1 Just Finished a Match, he has 123456 points, died 3 times,

(On Server)

Tell Game: Player 1 its updated.


Вопрос - Какую технологию для передачи данных JSON выбрать? И, самый интересный для меня вопрос - Как и куда опубликовать свой бекенд, чтобы в него могли поиграть все, кто угодно?
Спасибо
  • Вопрос задан
  • 3619 просмотров
Решения вопроса 1
devalone
@devalone
̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻
Если не слишком частый обмен с сервером, то может и норм, а вообще json вряд ли хороший выбор для игры, его ж ещё парсить надо, что может быть весьма накладным по ресурсам как для сервера, так и для клиента.
Tell Server: Player 1 Just Finished a Match, he has 123456 points, died 3 times,

Почему бы не передавать сырые данные в их байтовом представлении, т.е. пакет, где 32 байта(или сколько там у вас) под ключ авторизации, 4 байта под points и ещё 4 байта под times?
Как и куда опубликовать свой бекенд, чтобы в него могли поиграть все, кто угодно?

Вы вероятно имели ввиду "где разместить сервер?"? Если да, то на любом VDS, за 300 рублей можно купить с 1 ядром и 1024МБ ОЗУ. Клиент будет обращаться либо напрямую по ip, либо сначала резолвить доменное имя, второй вариант лучше.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
@tomatho
Это скорее ответ на ответ.
Парсинг JSON хорошей либой не затратнее чем чтение обычного текста.
Просто не все JSON библиотеки хорошо оптимизированы.

Проблемой может оказаться лишь то, что "пакет" в json больше чем "сырые" байты.
То есть, это скажется на требование к скорости интернет соединения.
Однако обычно проблема не в скорости, а в пинге. Но можно приблизительно оценить требуемый bandwidth.
Кроме того можно использовать JSON на этапе прототипирования.
Но тут может закрасться "ничто так не вечно как временное решение".

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

Проблема с сырыми байтами в том, что надо поддерживать их формат с обеих сторон.
Разные версии клиентов придётся либо блокировать пока они не обновятся до новой версии, либо писать жуткие портянки для обработки сырых байтов. Хотя JSON тут мало чем поможет.

И ещё, я не уверен, что ваш код парсящий сырые байты с учётом порядка байт, будет быстрее чем JSON.parse из под капота V8 (Node.js)
Ответ написан
Комментировать
@Neuyazvimy1
Не пиши свой бэкенд. Это трата много времени на разработку поддержку и т д. Используй сервис бэкенда. https://www.gamesparks.com/
А если все таки хочешь писать бэкенд. Не пиши пожалуйста свой сериализатор как тебе ответили выше.
Используй msgpack.org/index.html
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы