Какие термины и темы могут встретится при разработке сетевого движка для игры?
================================================================================

 Суть вопроса через две строчки. Добрый вечер хабр, без долгого приветствия. Мне 14 лет и это означает я еще не учился в университете. Но все же постарайтесь помочь на просьбу ниже.  

И так, я разрабатываю(написал первые 25 строчек) сетевой движок(сервер, кому как угодно) для такой популярной игры как Minecraft Bedrock. Под него нету официальной документации протокола, что серьезно усложняет процесс, но есть на данный момент 3 полностью написанных движка.   

* Первая проблема которую я встретил запустив UDP сокет очень очевидная для образованных людей)) У языков обычно есть функция которая называется decode() которая из байтов переводит все в строку. Ну я и взял b\x00\x00\x04\xd2 вот это ну и попытался перевести в строку. Конечно ничего не получилось, ибо это число 123.   

* Вторая проблема оказывается существует такая штука как endianness или по русски порядок байтов, этого я тоже не знал.   

и вот это строчка(b'\x00\x00\x04\xd2') оказалась Little endian. Нашел, прочитал, погулил. Разобрался и у меня получилось получить число 123:)   

К чему такое предисловие? Я буду очень благодарен всем кто сможет скинуть просто все возможные приколы которые могут встретятся, хоть это и наверняка проходят все на 1 курсе. Лучше просто короткие статьи которые описывают термин/тему которая может встретится при написании сетевого движка для игры(не важно конечно какой). Так же лучше без книг по типу foundations of python network programming, я расстроюсь когда прочитаю, из-за не совсем той информации:/  

Со статьями на АНГЛИЙСКОМ все окей.   

Почему не могу сам загуглить? -> Не знаю списка тем которые мне четко понадобятся в моем проекте.  

Большое спасибо тем кто поможет  

Кстати вот неоф документация [https://github.com/NiclasOlofsson/MiNET/blob/maste...](https://github.com/NiclasOlofsson/MiNET/blob/master/src/MiNET/MiNET/Net/MCPE%20Protocol%20Documentation.md) 

 Вряд ли в каком-то институте проходят сетевые движки на 1 курсе. Да и на 5-м вряд ли.  

То, как вы двигаетесь - так и выходит. Спотыкаетесь об проблему, гуглите, находите название проблемы, читаете пару коротких статей, поехали дальше.  

Можно почитать foundations, для повышения теории, но теория без практики - не прокатит, поэтому читайте книги парралельно с набиванием шишек. 

 Для начала я советую использовать TCP, а не UDP. Популярность TCP как бы намекает, что с ним работать намного легче; а причина этому - он сам отслеживает и фиксит многие проблемы, присущие протоколу IP: пропажа пакетов, дублирование пакетов, изменение порядка пакетов, невлезание пакета в MTU на каком-то из участков. А в UDP - будете отслеживать и фиксить всё это сами.  

  

А некоторые игры используют протоколы, работающие поверх TCP - например, HTTP. Это проще, но не годится для интерактивных игр с быстрой реакцией. 

 Можно начать с изучения уже созданных сетевых движков. Например, в этой вики можно получить хорошее представление, как движок Source работает с сетью:  

[Latency Compensating Methods in Client/Server In-g...](https://developer.valvesoftware.com/wiki/Latency_Compensating_Methods_in_Client/Server_In-game_Protocol_Design_and_Optimization)  

[Source Multiplayer Networking](https://developer.valvesoftware.com/wiki/Source_Multiplayer_Networking)  

Server to client:  

[Game Event or User Message](https://developer.valvesoftware.com/wiki/Networking_Events_%26_Messages)  

[Temporary Entity](https://developer.valvesoftware.com/wiki/Temporary_Entity)  

Client to server:  

[User Command](https://developer.valvesoftware.com/wiki/Usercmd)  

[ServerCmd()](https://developer.valvesoftware.com/wiki/ServerCmd())