Сообщение от HolyDel
уже неправильно, на клиентах можно считать только не геймплей-специфик части. считаем все на сервере 
|
Поддерживаю.
Сервер должен отвечать за все просчёты влияющие на геймплай и доступность информации. Клиент же должен получать ТОЛЬКО ту информацию которую должен (если чужой корабль ушёл в инвиз, то слать инфу о его позиции НЕЛЬЗЯ, т.к. простой чит сниффа (симулируем пакет от сервера типо "противник 42 вышел из инвиза", и мы снова его видим).
Таких читов может быть куча и повсюду. Например если пытаешься стрелять во врага, и что-то стоит на пути, если проверку будет делать клиент и слать пакет стрельбы серверу, а сервер будет тупо стрелять - то тут wallhack легко реализовать.
В политике сетевых отношений, Клиент - это лох, который всё выполняет, раб, и лишь просит разрешения на то или иное действие, которое не факт что выполнится. А Сервер - это босс, он всё решает, и лишь он всё знает.
Сервер должен быть устойчив на любой спам, и любую ересь от клиентов и ещё других приложений. Должен качественно уметь отсоединять клиентов, и сообщать об этом также качественно. Проблемы большие будут на каждом шагу.
Сеть, это большой лес. Писать сервер на каком-нибудь блице, я настоятельно не рекомендую.
Клиент - это рендер.
Сервер - это мозг.
Насчёт соединений, есть возможности обхода NAT'а, но это не просто, блицом этого не реализуешь. Можно конечно сделать сервер отдельно, который будет обходить NAT, и паралельно с сервером запускать игровой клиент (как в HL, там на деле запускается dedicated сервер, как процесс, и скрывается консоль), тот кто хостит игру, на деле запускает сервер, и такой же клиент как и все другие игроки, и сам к себе коннектится.
Пока нету возможности обойти программно NAT, можешь забиндить сервер на прослушку любого IP (хз как в блице), далее запускать сервер на определённом порту, выбери какойнибудь 20ххх, далее, идёшь в настройки роутера, и там устанавливаешь port forwarding на свой комп, указывая порт сервера.
Для теста попробуй сам к себе зайти, но у клиента устанавливай внешний IP. Узнать его
тут.