RareScrap
Модератор
- 1,334
- 40
- 645
Доброе утро, народ. Я столкнулся с необычайно интересным, на мой взгляд, поведением...
У меня есть IMessage, который отправляется на сервер и изменяет там инвентарь игрока. Я расчитываю, что информация об измененых слотах придет на клиент во время вызова
Я дебажил код ванильный код кучу раз в поисках ответа на вопрос "как такое возможно"? И у меня складывается впечатление, что пакет читаются в отдельном потоке, а в момент тика обрабатываются те, что "успели накопиться".
Вопрос вот в чем - объясните мне как работает сетевая система в майнкрафте и в особенности - как принимаются мессажжы и почему сервер обрабатывает несколько мессаджей за один тик.
!!ДИСКЛЕЙМЕР!!
Допускаю, что вопрос может оказаться весьма сумбурным, так что любые правки и критика приветствуются. Логи/код пока не вижу смысла выкладывать. Мои знания пока не позволяют мне разобраться в сетевом реализации игры.
У меня есть IMessage, который отправляется на сервер и изменяет там инвентарь игрока. Я расчитываю, что информация об измененых слотах придет на клиент во время вызова
EntityPlayerMP#onUpdate() при помощи ванильного пакета S2FPacketSetSlot (см. Container#detectAndSendChanges()). В целом, я рассчитывал что на каждый мой пакет игра отправит ответ на клиент. Так все и есть, но при попытке протестировать программу на хаотичное поведение (симулировал пользователя-аутиста, тыкая куда только можно), я заметил, что на сервер улетело 2 IMessege'а. Эти два месседжа внесли изменения в инвентарь, а EntityPlayerMP#onUpdate() отослал изменения, сделанные только последним пакетом. Достоверно известно из логов, что пакеты НЕ были потеряны и выполнили свою работу. Т.е. мессаджы были обработаны в один тик сервера (т.е. за один вызов networkTick()).Я дебажил код ванильный код кучу раз в поисках ответа на вопрос "как такое возможно"? И у меня складывается впечатление, что пакет читаются в отдельном потоке, а в момент тика обрабатываются те, что "успели накопиться".
Вопрос вот в чем - объясните мне как работает сетевая система в майнкрафте и в особенности - как принимаются мессажжы и почему сервер обрабатывает несколько мессаджей за один тик.
!!ДИСКЛЕЙМЕР!!
Допускаю, что вопрос может оказаться весьма сумбурным, так что любые правки и критика приветствуются. Логи/код пока не вижу смысла выкладывать. Мои знания пока не позволяют мне разобраться в сетевом реализации игры.