Создание игрового сервера

Сеть в Unity3D

Re: Создание игрового сервера

Сообщение broken 13 дек 2013, 17:44

Добрый день!
Netty на Java не работает с UnitySocketIO без дополнительных надстроек?
Проект под Web player.
Если я правильно понимаю, то сервер должен иметь надстройку для Socket.IO?
Планирую работать с Netty сервером, какую библиотеку для Unity3d/C# лучше использовать по работе с сокетами? Видел такие как SuperSocket Client. Посоветуйте :)
Проекты на Unity3D:
Монополия 3D: http://unity3d.ru/distribution/viewtopic.php?f=10&t=25816
Битва валют 3D (файтинг): http://unity3d.ru/distribution/viewtopic.php?f=17&t=17186
Аватара пользователя
broken
UNITрон
 
Сообщения: 243
Зарегистрирован: 29 мар 2013, 15:00
Откуда: Набережные Челны, Россия
Skype: al.ryazanov

Re: Создание игрового сервера

Сообщение Woolf 13 дек 2013, 19:35

broken писал(а):Добрый день!
Netty на Java не работает с UnitySocketIO без дополнительных надстроек?
Проект под Web player.
Если я правильно понимаю, то сервер должен иметь надстройку для Socket.IO?
Планирую работать с Netty сервером, какую библиотеку для Unity3d/C# лучше использовать по работе с сокетами? Видел такие как SuperSocket Client. Посоветуйте :)


Долго вчитывался и не могу врубиться, каким боком netty относится к юнити? Я уж молчу, что нетти на java, а юня c java не работает.
Разработчик theFisherOnline - там, где клюёт
Разработчик Atom Fishing II - Первая 3D MMO про рыбалку
Разработчик Atom Fishing - Рыбалка на поплавок, донку, нахлыст, блесну в постъядерный период.
Аватара пользователя
Woolf
Адепт
 
Сообщения: 7179
Зарегистрирован: 02 мар 2009, 16:59

Re: Создание игрового сервера

Сообщение broken 13 дек 2013, 21:13

Прошу прощения, возможно криво написал.
Для создания игрового сервера выбирали между SmartFoxServer и самописным сервером. Решили писать свой сервер, за основу решили выбрать Netty (http://netty.io/) Собственно вопрос был в том какую либу лучше использовать для работы с сокетами в Unity/c# или использовать дефолтные средства c#.
Не совсем понял почему Unity не может комуницировать с Java сервером посредством сокетов? Сегодня проверял, из редактора во всяком случае работало.
Проекты на Unity3D:
Монополия 3D: http://unity3d.ru/distribution/viewtopic.php?f=10&t=25816
Битва валют 3D (файтинг): http://unity3d.ru/distribution/viewtopic.php?f=17&t=17186
Аватара пользователя
broken
UNITрон
 
Сообщения: 243
Зарегистрирован: 29 мар 2013, 15:00
Откуда: Набережные Челны, Россия
Skype: al.ryazanov

Re: Создание игрового сервера

Сообщение Woolf 14 дек 2013, 07:20

broken писал(а):Прошу прощения, возможно криво написал.
Для создания игрового сервера выбирали между SmartFoxServer и самописным сервером. Решили писать свой сервер, за основу решили выбрать Netty (http://netty.io/) Собственно вопрос был в том какую либу лучше использовать для работы с сокетами в Unity/c# или использовать дефолтные средства c#.
Не совсем понял почему Unity не может комуницировать с Java сервером посредством сокетов? Сегодня проверял, из редактора во всяком случае работало.



А, я думал вы на стороне юнити нетти хотите прикрутить. А зачем вам какие-то либы на клиентской стороне? По мне, так обычных сокетов вполне хватает. Тем более, что у нетти никаких особых заморочек с форматом пакетов вроде нет. Единственное что, придется немного повозиться с преобразованиями Little- Big-Endian. На юнити запустите два треда, в одном отправляйте, в другом принимайте. Поскольку юнити должна работать в основном потоке, синхронизируйте обмен данными между тредами при помощи защищенных очередей. Обрабатывать инфу можно на апдейте или фикседапдейте. Ну вот как-то так.
Разработчик theFisherOnline - там, где клюёт
Разработчик Atom Fishing II - Первая 3D MMO про рыбалку
Разработчик Atom Fishing - Рыбалка на поплавок, донку, нахлыст, блесну в постъядерный период.
Аватара пользователя
Woolf
Адепт
 
Сообщения: 7179
Зарегистрирован: 02 мар 2009, 16:59

Re: Создание игрового сервера

Сообщение broken 15 дек 2013, 21:14

Спасибо за ответ. По поводу сторонних либ просто интересно было вдруг есть что-то уже более менее готовое для юнити, включающее различного рода оптимизации, разбиение по потокам и тп.
Что касается стандартных c# сокетов, вы подразумевали использование модели синхронных сокетов? Смотрел в инете но так и не понял какая модель сокетов предпочтительнее в unity - sync или async, чистые Sockets или враппер TcpClient.
И еще один вопрос, наткнулся на упоминание в статьях protobuf для сериализации данных, не приходилось использовать? И намного ли затратнее использовать тот же json или BinaryFormatter?
Проекты на Unity3D:
Монополия 3D: http://unity3d.ru/distribution/viewtopic.php?f=10&t=25816
Битва валют 3D (файтинг): http://unity3d.ru/distribution/viewtopic.php?f=17&t=17186
Аватара пользователя
broken
UNITрон
 
Сообщения: 243
Зарегистрирован: 29 мар 2013, 15:00
Откуда: Набережные Челны, Россия
Skype: al.ryazanov

Re: Создание игрового сервера

Сообщение Sality 20 дек 2013, 17:32

Я не использовал BinaryFormatter, юзаю обычно json/ Но как попробовал protobuf я офигел. Быстро работает, пакет мало весит потому что бинарный, и самое важное для меня просто шикарно удобно. Мне не приходится разбирать данные, я получаю сразу структуру с данными.

Что касается синхронки или асинхронки, я сделал вывод что перепрыгнуть через 15 мс (частота обновления кадра) я немогу, и если учесть что .net в общем медленный, в синхронном режиме получается даже быстрее чем в асинхронном. То есть приходит пакет, для передачи его в основной поток используем буфер, который читается не быстрее 15 мс. (15 уже просрали), далее упираемся в медленный .net и на обработку пакета тратим например 5 мс. Ну и на отправку можно чуть потратить, но тут можно с хитрить вобщем не считаем. Получается всего на отработку запроса на клиенте 20 мс. В синхронке же мы потратим только 5 мс на отработку запроса.

Вот так вот)

Ой, я подумал про клиент реч идет. На серваке лучше асинхронно и многопоточно) Только если у вас поумному сделано работа с БД, иначе вся куча потоков будет застревать в одном потоке БД и толку будет столько же, как и от 1 поточного сервера.
Последний раз редактировалось Sality 20 дек 2013, 17:36, всего редактировалось 1 раз.
Аватара пользователя
Sality
Старожил
 
Сообщения: 771
Зарегистрирован: 26 ноя 2011, 15:31
Откуда: Украина

Re: Создание игрового сервера

Сообщение Woolf 20 дек 2013, 17:34

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


Ну, я использую фотон с бинарным форматом. Лично мне нравится. Но он платный.
Разработчик theFisherOnline - там, где клюёт
Разработчик Atom Fishing II - Первая 3D MMO про рыбалку
Разработчик Atom Fishing - Рыбалка на поплавок, донку, нахлыст, блесну в постъядерный период.
Аватара пользователя
Woolf
Адепт
 
Сообщения: 7179
Зарегистрирован: 02 мар 2009, 16:59

Re: Создание игрового сервера

Сообщение broken 20 дек 2013, 23:15

Sality писал(а):Я не использовал BinaryFormatter, юзаю обычно json/ Но как попробовал protobuf я офигел. Быстро работает, пакет мало весит потому что бинарный, и самое важное для меня просто шикарно удобно. Мне не приходится разбирать данные, я получаю сразу структуру с данными.

Что касается синхронки или асинхронки, я сделал вывод что перепрыгнуть через 15 мс (частота обновления кадра) я немогу, и если учесть что .net в общем медленный, в синхронном режиме получается даже быстрее чем в асинхронном. То есть приходит пакет, для передачи его в основной поток используем буфер, который читается не быстрее 15 мс. (15 уже просрали), далее упираемся в медленный .net и на обработку пакета тратим например 5 мс. Ну и на отправку можно чуть потратить, но тут можно с хитрить вобщем не считаем. Получается всего на отработку запроса на клиенте 20 мс. В синхронке же мы потратим только 5 мс на отработку запроса.

Вот так вот)

Ой, я подумал про клиент реч идет. На серваке лучше асинхронно и многопоточно) Только если у вас поумному сделано работа с БД, иначе вся куча потоков будет застревать в одном потоке БД и толку будет столько же, как и от 1 поточного сервера.


Окей, спасибо. Я именно про клиент спрашивал в последнем сообщении. Значит твоя рекомендация сводится к использованию дефолтных Socket (или TcpClient), синхронный режим и сериализацию protobuf.
Проекты на Unity3D:
Монополия 3D: http://unity3d.ru/distribution/viewtopic.php?f=10&t=25816
Битва валют 3D (файтинг): http://unity3d.ru/distribution/viewtopic.php?f=17&t=17186
Аватара пользователя
broken
UNITрон
 
Сообщения: 243
Зарегистрирован: 29 мар 2013, 15:00
Откуда: Набережные Челны, Россия
Skype: al.ryazanov

Re: Создание игрового сервера

Сообщение Sality 21 дек 2013, 00:28

Да, это имхо мое мнение исходя из моих эксперементов. Если у кого на практике были другие ситуации я бы почитал аргументацию.
Аватара пользователя
Sality
Старожил
 
Сообщения: 771
Зарегистрирован: 26 ноя 2011, 15:31
Откуда: Украина

Re: Создание игрового сервера

Сообщение gnoblin 21 дек 2013, 03:48

photon cloud
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: Создание игрового сервера

Сообщение broken 21 дек 2013, 08:31

gnoblin писал(а):photon cloud

Сейчас диалог идет в контексте создания своего сервера на java и выборе инструмента для работы с сокетами на клиенте.
Вы имели ввиду photon cloud + pun? Под сервер на java/netty?
Проекты на Unity3D:
Монополия 3D: http://unity3d.ru/distribution/viewtopic.php?f=10&t=25816
Битва валют 3D (файтинг): http://unity3d.ru/distribution/viewtopic.php?f=17&t=17186
Аватара пользователя
broken
UNITрон
 
Сообщения: 243
Зарегистрирован: 29 мар 2013, 15:00
Откуда: Набережные Челны, Россия
Skype: al.ryazanov

Re: Создание игрового сервера

Сообщение Woolf 21 дек 2013, 11:23

gnoblin писал(а):photon cloud


Так а причем тут PUN? Как я понял, у человека стоит задача авторитарный сервер использовать.
Для TC - мой совет таков, не изобретайте велосипед. Берите готовое решение и используйте его. С самописными серверами куча мороки да и пахнет это изобретением велосипедов. Сейчас есть с десяток вполне нормальных решений. Если не стоит задачи именно java, толучший на сегодняшний день, это Photon (на сишарпе), но есть и java решения, тот же ES5, SmartFox и другие. У всех серверов есть бесплатная триалка на какое-то количество коннектов. На время разработки 100 бесплатных коннектов вам выше крыши, а когда придет пора запуска, думаю, что деньги найти можно, тем более что у того-же фотона сейчас есть "повременные" лицензии за $30-100 долларов в месяц. Ну а если запуститесь и игра будет стоящей, то донатом можно уже выбирать любые лицензии, денег должно хватить.
Разработчик theFisherOnline - там, где клюёт
Разработчик Atom Fishing II - Первая 3D MMO про рыбалку
Разработчик Atom Fishing - Рыбалка на поплавок, донку, нахлыст, блесну в постъядерный период.
Аватара пользователя
Woolf
Адепт
 
Сообщения: 7179
Зарегистрирован: 02 мар 2009, 16:59

Re: Создание игрового сервера

Сообщение broken 21 дек 2013, 13:17

Да, спасибо за ответ. К сожалению решение о написании своего сервера на java/netty уже принято, сервером занимается отдельный java разработчик. Вот я и интересовался есть ли что-то из готовых либ под c#/unity позволяющие нормально обрабатывать события сервера по сокетам, чтобы акцентировать усилия на разработку самой игры, а не написание нового велосипедного обработчика сокетов с оптимизациями.
Проекты на Unity3D:
Монополия 3D: http://unity3d.ru/distribution/viewtopic.php?f=10&t=25816
Битва валют 3D (файтинг): http://unity3d.ru/distribution/viewtopic.php?f=17&t=17186
Аватара пользователя
broken
UNITрон
 
Сообщения: 243
Зарегистрирован: 29 мар 2013, 15:00
Откуда: Набережные Челны, Россия
Skype: al.ryazanov

Re: Создание игрового сервера

Сообщение HacKeR 22 дек 2013, 17:21

Что бы не создавать отдельную тему спрошу здесь:
Какой вариант лучше для сервера:
1) Сервер на синхронных ТСР сокетак, где каждому клиенту выделяется свой сокет и он читает/отправляет данные в своем потоке?
2) Сервер на синхронных UDP сокетах, где каждому клиенту выделяется свой сокет и он читает/отправляет данные в своем потоке?
3) Другой вариант?

Ибо написал сервер/клиент на ТСР сокетах но видно небольшую задержку между приемом данных. Проверяю очень просто - отправляю местоположение 1 игрока другому и когда приходят данные - я перемещаю игрокак в то место.
1 Игрок на экране второго очень дергается.

Еще 1 вопрос: Как лучше всего отправлять данные (в каком виде)? Сейчас же все отправляю в байтах.
HacKeR
UNIверсал
 
Сообщения: 360
Зарегистрирован: 12 ноя 2010, 21:14

Re: Создание игрового сервера

Сообщение Guyver 23 дек 2013, 07:20

HacKeR писал(а):1) Сервер на синхронных ТСР сокетак, где каждому клиенту выделяется свой сокет и он читает/отправляет данные в своем потоке?

- плохо. много потоков - смерть.

HacKeR писал(а):2) Сервер на синхронных UDP сокетах, где каждому клиенту выделяется свой сокет и он читает/отправляет данные в своем потоке?

- что за любовь к отдельным потокам ?

HacKeR писал(а):3) Другой вариант?

- да
.асинхронные сокеты .... ?
.синхронные сокеты - select/poll и таск пул из нескольких тредов, которые поровну делят нагрузку по соединениям

HacKeR писал(а):Ибо написал сервер/клиент на ТСР сокетах но видно небольшую задержку между приемом данных.

- проверьте ещё включен ли Нагл (нужно отключить .. или почитать про него, чтобы понимать зачем он)

HacKeR писал(а):Еще 1 вопрос: Как лучше всего отправлять данные (в каком виде)? Сейчас же все отправляю в байтах.

у меня свой сериализатор, которому кормлю класс, он его в пакет оформляет. умный десериализатор выгребает входящий буфер, дробит на пакеты, порождает классы - пакеты, у них вызывает хендлеры. классы сериализуются очень тонко. ни грамма жира (поэтому свой сериализатор а не чужие решения).
Xcombat: 3D шутер на летающих тарелках!
Аватара пользователя
Guyver
UNIверсал
 
Сообщения: 392
Зарегистрирован: 21 июл 2010, 08:04
Откуда: Челябинск

Пред.След.

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

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

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