Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / Серверный программист - кто это ?

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

Страницы: 1 2 Следующая »
GladiatorПостоялецwww12 окт. 201811:18#0
Привет.

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

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

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

Sh.Tac.Постоялецwww12 окт. 201811:30#1
Gladiator
> чем отличается серверный и клиентский программист в геймдеве ?
я одно время был серверным программистом, занимался всяким говном, базами данных, сервисами
без этого ММО никак

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

MANABПостоялецwww12 окт. 201812:05#2
Серверный программист решает задачи по реализации мультиплеера в игре - сервера и БД, их архитектура и обслуживание, передача данных по сети и их обработка с минимальным лагом, интеграция с клиентом. Вплоть до деплоя серверов (это уже ближе к DevOps).
GladiatorПостоялецwww12 окт. 201812:15#3
Sh.Tac.
MANAB
Спасибо за ответы.

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

ardruПостоялецwww12 окт. 201815:28#4
Гладиатор, многое зависит от жанра игры. Например, если взять 3д шутер, где всё происходит очень быстро, то в целях минимизации передачи данных логика игры выполняется и на клиенте и на сервере. Часть этой логики реализована в скриптах, поэтому отделить серверный код от клиентского невозможно. А если взять шахматы, где клиенты передают "е2-е4" раз в минуту, то там, конечно, вся логика может только на сервере выполняться. Зато, серверному программисту не придётся париться с графикой, моделями, видеокартами, операционными системами, движками, всякими OpenGl, Direct3d, Vulcan, ему до фонаря разрешение экрана, тип устройства и прочая ересь. Но зато надо знать серверные технологии: базы данных, хранение паролей, интернет протоколы, многопоточность - всё то, от чего зависит пропускная способность сервера.
Sh.Tac.Постоялецwww12 окт. 201817:23#5
Gladiator
> логика игры пишется на сервере
очевидно логика, равно как и сеть не может быть только на сервере

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

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

RikkПостоялецwww12 окт. 201817:26#6
Sh.Tac.
> второй момент, когда одну фичу реализуют два чела получается много хуже,
разумеется хуже ведь надо платить две зарплаты и две семьи кормить , вместо одной
с другой стороны один клиент-серверный может потребовать две зарплаты первая за клиент а вторая за сервер чтоб кормить одну семью

Правка: 12 окт. 2018 17:29

GladiatorПостоялецwww12 окт. 201822:24#7
В целом понятно. Т.е. главное отличие сетевого программиста от клиентского в понимании сети, умении правильно подбирать сетевую архитектуру для того или иного типа игр, знание сетевых движков(возможно) и т.д. ?
LucasitoПостоялецwww12 окт. 201822:37#8
Sh.Tac.
> второй момент, когда одну фичу реализуют два чела получается много хуже, чем
> когда один, но на сервере и на клиенте сразу
>
> в игровых проектах лучше когда программисты "клиент-серверные", т.е. могут и
> там, и там
У меня из-за такого смешения получалось работать гораздо медленнее, чем если только одним заниматься. В голове больше информации приходилось держать. Но тогда я еще неопытный был, может сейчас было бы по другому.
ardruПостоялецwww13 окт. 201811:01#9
Gladiator
> В целом понятно. Т.е. главное отличие сетевого программиста от клиентского в
> понимании сети, умении правильно подбирать сетевую архитектуру для того или
> иного типа игр, знание сетевых движков(возможно) и т.д. ?

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

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

Правка: 13 окт. 2018 11:16

Sh.Tac.Постоялецwww13 окт. 201812:06#10
ardru
> Писать сервер отдельно есть смысл только для определённых типов проектов
> Если у тебя уровни со скриптами, написанными в Юнити
было дело, как-то решил что проект на юнити весьма определённый : )

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

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

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

Правка: 13 окт. 2018 12:10

RikkПостоялецwww13 окт. 201812:27#11
на юнити как пишется клиент и сервер ? на одном и том же языке юнити-прогание си-шарп , или на разных языках типа клиент=си-шарп а сервер вот прям обязан на си++?

Правка: 13 окт. 2018 12:27

Sh.Tac.Постоялецwww13 окт. 201812:44#12
Rikk
> на юнити как пишется клиент и сервер ?
юнька и близко не клиент-серверный движок
поэтому там изначально зоопарк "серверных решений":
Photon C#
SmartfoxServer Java
UnityPark Erlang (домен не оплачен, антивирус агрится, окочурились видать)
MANABПостоялецwww15 окт. 201818:01#13
Rikk
Зависит от игры. Можно и на PHP или node.js или еще на чем, сериализируй/десериализуй данные по сети просто одинаково. Просто часть общей логики, которую можно вынести было бы в общую dll, придется дублировать, что может быть чревато багами.
Я для юньки писал и на C# и на PHP, как веб так и runtime, все зависит от типа игры.
ZabПостоялецwww15 окт. 201822:01#14
В по настоящему массовых играх на сервере должно все работать асинхронно. Большинство то программистов такому не обучено. Более того, даже не видят в этом проблемы. Она их убивает, а они ее не видят.
Если игроков порядка 300, на них еще можно завести по потоку на каждого, если больше - надо действовать иначе.
Страницы: 1 2 Следующая »

/ Форум / Программирование игр / Общее

2001—2018 © GameDev.ru — Разработка игр