Войти
ПрограммированиеФорумОбщее

Серверный программист - кто это ?

Страницы: 1 2 Следующая »
#0
11:18, 12 окт. 2018

Привет.

Мой вопрос может показаться странным, но чем отличается серверный и клиентский программист в геймдеве ? Я не очень понимаю когда люди ищут серверного программиста.

Я всегда думал, что вот если писать оффлайновый клиент, то это тот же чел что и серверный программист, просто серверный пишет логику на сервере. Не ? Объясните мне пожалуйста, какую работу выполняет серверный программист.

Заранее благодарю.


#1
11:30, 12 окт. 2018

Gladiator
> чем отличается серверный и клиентский программист в геймдеве ?
я одно время был серверным программистом, занимался всяким говном, базами данных, сервисами
без этого ММО никак

теперь просто игровой программист, ковыряю логику и на сервере, и на клиенте

#2
12:05, 12 окт. 2018

Серверный программист решает задачи по реализации мультиплеера в игре - сервера и БД, их архитектура и обслуживание, передача данных по сети и их обработка с минимальным лагом, интеграция с клиентом. Вплоть до деплоя серверов (это уже ближе к DevOps).

#3
12:15, 12 окт. 2018

Sh.Tac.
MANAB
Спасибо за ответы.

MANAB
Если архитектура игры предполагает  авторитарный сервер, ведь логика игры пишется на сервере. Этим занимается не серверный программист ?

#4
15:28, 12 окт. 2018

Гладиатор, многое зависит от жанра игры. Например, если взять 3д шутер, где всё происходит очень быстро, то в целях минимизации передачи данных логика игры выполняется и на клиенте и на сервере. Часть этой логики реализована в скриптах, поэтому отделить серверный код от клиентского невозможно. А если взять шахматы, где клиенты передают "е2-е4" раз в минуту, то там, конечно, вся логика может только на сервере выполняться. Зато, серверному программисту не придётся париться с графикой, моделями, видеокартами, операционными системами, движками, всякими OpenGl, Direct3d, Vulcan, ему до фонаря разрешение экрана, тип устройства и прочая ересь. Но зато надо знать серверные технологии: базы данных, хранение паролей, интернет протоколы, многопоточность - всё то, от чего зависит пропускная способность сервера.

#5
17:23, 12 окт. 2018

Gladiator
> логика игры пишется на сервере
очевидно логика, равно как и сеть не может быть только на сервере

второй момент, когда одну фичу реализуют два чела получается много хуже, чем когда один, но на сервере и на клиенте сразу

в игровых проектах лучше когда программисты "клиент-серверные", т.е. могут и там, и там

#6
17:26, 12 окт. 2018

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

#7
22:24, 12 окт. 2018

В целом понятно. Т.е. главное отличие сетевого программиста от клиентского в понимании сети, умении правильно подбирать сетевую архитектуру для того или иного типа игр, знание сетевых движков(возможно) и т.д. ?

#8
22:37, 12 окт. 2018

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

#9
11:01, 13 окт. 2018

Gladiator
> В целом понятно. Т.е. главное отличие сетевого программиста от клиентского в
> понимании сети, умении правильно подбирать сетевую архитектуру для того или
> иного типа игр, знание сетевых движков(возможно) и т.д. ?

Нет, серверный программист обычно использует те архитектуры, которые он знает, будь то php, node.js, java, .net, ruby, C++ или что угодно ещё. Писать сервер отдельно есть смысл только для определённых типов проектов, где ничего не надо просчитывать на клиенте, например, agar.io. Там вся логика выполняется только на сервере, а клиенту постоянно передаются позиции и размеры ограниченного количества кружков.

Если у тебя уровни со скриптами, написанными в Юнити или в Унриле, то и сервер у тебя должен соответственно запускать тот движок с уровнями и скриптами. И клиент запускает те же скрипты, таким образом, если игрок попадает в зону, которая запускает скрипт Х, то сервер запускает этот скрипт и клиент тоже у себя запускает этот скрипт, когда игрок попадает в эту зону. Обычно, можно делать скрипты которые запускаются только на сервере или только на клиенте. Если это какая-то чисто визуальная анимация (фейерверк), то запускать его на сервере смысла нет. Для таких игр не нужен серверный программист, так как движок сам реализует взаимодействие между клиентами и сервером. Надо просто чтобы программист знал все тонкости синхронизации состояния игры между сервером и клиентами средствами, предоставляемыми данным движком.

#10
12:06, 13 окт. 2018

ardru
> Писать сервер отдельно есть смысл только для определённых типов проектов
> Если у тебя уровни со скриптами, написанными в Юнити
было дело, как-то решил что проект на юнити весьма определённый : )

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

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

пришлось ваять авторитарный сервер на плюсах, но я не учёл несколько важных моментов, из-за чего затея провалилась:
1. код пришлось писать два раза, на С++ и на C#
2. поскольку я был серверный программист, меня не особо интересовало как оно в результате работает на юньке, это типа задача клиентского программиста
3. у меня не было опыта в шутерах, но была идея экономить трафик, и я зачем-то ещё сделал безтиковую симуляцию, т.е. мне на сервер приходит контрол с таймстемпом tN, я беру предыдущий и симулирую на интервале tN - tN-1 одним махом, такое просто не может работать правильно

#11
12:27, 13 окт. 2018

на юнити как пишется клиент и сервер ? на одном и том же языке юнити-прогание си-шарп , или на разных языках типа клиент=си-шарп а сервер вот прям обязан на си++?

#12
12:44, 13 окт. 2018

Rikk
> на юнити как пишется клиент и сервер ?
юнька и близко не клиент-серверный движок
поэтому там изначально зоопарк "серверных решений":
Photon C#
SmartfoxServer Java
UnityPark Erlang (домен не оплачен, антивирус агрится, окочурились видать)

#13
18:01, 15 окт. 2018

Rikk
Зависит от игры. Можно и на PHP или node.js или еще на чем, сериализируй/десериализуй данные по сети просто одинаково. Просто часть общей логики, которую можно вынести было бы в общую dll, придется дублировать, что может быть чревато багами.
Я для юньки писал и на C# и на PHP, как веб так и runtime, все зависит от типа игры.

#14
22:01, 15 окт. 2018

В по настоящему массовых играх на сервере должно все работать асинхронно. Большинство то программистов такому не обучено. Более того, даже не видят в этом проблемы. Она их убивает, а они ее не видят.
Если игроков порядка 300, на них еще можно завести по потоку на каждого, если больше - надо действовать иначе.

Страницы: 1 2 Следующая »
ПрограммированиеФорумОбщее

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