Size: a a a

pro.graphon (and gamedev)

2020 July 09

U

UsernameAK in pro.graphon (and gamedev)
Vladimir SHCHerba
Данные, которые постоянно обновляются и некритично их немного потерять -- UDP. Важные данные, которые обновляются нечасто и их терять нельзя -- ТСР.
ты мне сейчас два сокета открыть предложил?
источник

VS

Vladimir SHCHerba in pro.graphon (and gamedev)
Я предложил выбирать инструменты в соответствии с задачей. Если необходимо, можно и два сокета.
источник

ab

alexey bezgodoff in pro.graphon (and gamedev)
Vladimir SHCHerba
Данные, которые постоянно обновляются и некритично их немного потерять -- UDP. Важные данные, которые обновляются нечасто и их терять нельзя -- ТСР.
Ерунда полная. Роутеры отдают приоритет TCP пакетам. Кроме того, передавая TCP ты забиваешь канал пакетами подтверждения.
источник

ab

alexey bezgodoff in pro.graphon (and gamedev)
Тру пацаны реализуют reliable протокол поверх UDP.
источник

U

UsernameAK in pro.graphon (and gamedev)
а в TCP нет возможности отправлять unreliable пакеты?
источник

ab

alexey bezgodoff in pro.graphon (and gamedev)
UsernameAK
а в TCP нет возможности отправлять unreliable пакеты?
Нет
источник

ab

alexey bezgodoff in pro.graphon (and gamedev)
В общем, если шутан, начальный гейм стейт собирается из кусочков: сервер отправляет фрагмент, клиент отправляет битовую маску полученных фрагментов. Сервер получает маску, если обнаруживается пропущенный фрагмент —  отправляет заново.
источник

VS

Vladimir SHCHerba in pro.graphon (and gamedev)
Ерунда -- это советовать человеку у которого явно нет большого опыта в сетевом программировании делать свой надежный протокол поверх UDP. А остальное это специфика. Если ТСР трафика будет небольшое количество, он никак мешать UDP не будет. Если значительное количество данных должно быть надёжно отправлено -- согласен, протокол поверх UDP отлично подойдёт, но тогда лучше взять готовое, проверенное решение.
источник

ab

alexey bezgodoff in pro.graphon (and gamedev)
Когда пошёл игровой процесс можно отправлять сжатую дельту между подтвержденым и текущим гейм-стейтом.
источник

ab

alexey bezgodoff in pro.graphon (and gamedev)
Vladimir SHCHerba
Ерунда -- это советовать человеку у которого явно нет большого опыта в сетевом программировании делать свой надежный протокол поверх UDP. А остальное это специфика. Если ТСР трафика будет небольшое количество, он никак мешать UDP не будет. Если значительное количество данных должно быть надёжно отправлено -- согласен, протокол поверх UDP отлично подойдёт, но тогда лучше взять готовое, проверенное решение.
Надёжный протокол поверх UDP пишется на коленке за один вечер (при условии, что данных не будет больше чем размер датаграммы).
источник

ab

alexey bezgodoff in pro.graphon (and gamedev)
Собирать большие пакеты да, не так тривиально
источник

ab

alexey bezgodoff in pro.graphon (and gamedev)
Vladimir SHCHerba
Ерунда -- это советовать человеку у которого явно нет большого опыта в сетевом программировании делать свой надежный протокол поверх UDP. А остальное это специфика. Если ТСР трафика будет небольшое количество, он никак мешать UDP не будет. Если значительное количество данных должно быть надёжно отправлено -- согласен, протокол поверх UDP отлично подойдёт, но тогда лучше взять готовое, проверенное решение.
Кроме того даже поверх TCP придётся реализовывать свой протокол, т.к. TCP не гарантирует передачу границ пакетов
источник

VS

Vladimir SHCHerba in pro.graphon (and gamedev)
В этом и проблема, что в сетевом программировании существует огромное количество нюансов. Так что, в общем-то, ответ зависит от цели. Если по фану потыкать сетевое программирование -- можно и свой на коленке. Если надо чтобы прям работало в настоящем проекте хорошо -- хз, я бы не советовал если нет обширного опыта за плечами, лучше готовое решение взять.
источник

L

Lain-dono in pro.graphon (and gamedev)
UsernameAK
в играх сеть лучше через UDP или через TCP делать?
Зависит от игры. Если это с очень критичным реалтаймом вроде файтингов или шутанов, то там без UDP не обойтись. На мобилках UDP придётся делать для любого +/- реалтайма.

Для условной ММО дрочильни на десктопах можно и TCP брать. Да и вообще для всего, где можно меньше 30fps на сеть. Кроме мобилок опятьж ибо там потери пакетов могут делать TCP бобо.

Держать одновременно открытыми TCP и UDP оче плохо. Но вот использовать их вместе вполне можно. Например через HTTPS(TCP) авторизация/обновляшки и подобное. А для самой игры UDP-only.

Читать по теме рекомендую
https://gafferongames.com/
https://github.com/networkprotocol/netcode
https://github.com/ValveSoftware/GameNetworkingSockets
Ещё в блоге https://habr.com/ru/company/pixonic/ пошарься
источник

PK

Pavel Kazakov in pro.graphon (and gamedev)
UsernameAK
в играх сеть лучше через UDP или через TCP делать?
TCP никогда почти не нужен; обычно транспортный протокол поверх UDP пишут
источник

L

Lain-dono in pro.graphon (and gamedev)
Pavel Kazakov
TCP никогда почти не нужен; обычно транспортный протокол поверх UDP пишут
В медленных играх на десктопе TCP вполне справляется. В 2к20 вполне нормальные сети же
источник

L

Lain-dono in pro.graphon (and gamedev)
Вон WebSocket пользуют и живут же как-то
источник

AF

Aidar Fattakhov in pro.graphon (and gamedev)
Lain-dono
Вон WebSocket пользуют и живут же как-то
Там кстати тащат же этот quic в качестве http/3
источник

AF

Aidar Fattakhov in pro.graphon (and gamedev)
Типа узкое место теперь то что TCP пакеты последовательны и имеют порядок и не очень подходят для мультиплексированного уптхивания нескольких каналов в один(по заявлениям некоторых корпораций которые хотят все на http переписать; что нужно курить чтобы придумать DOH при наличии DOT?)
источник

PK

Pavel Kazakov in pro.graphon (and gamedev)
Lain-dono
В медленных играх на десктопе TCP вполне справляется. В 2к20 вполне нормальные сети же
Скажи это мобильным сетям с потерей пакетов
источник