Помогите Увеличение TimeOut игрока.

  • Автор темы Автор темы MOR_IV
  • Дата начала Дата начала

MOR_IV

Активный участник
Пользователь
Баллы
88
Ник в Minecraft
MOR_IV
Проблема заключается в том, что игроки зайдя на сервер получают текстуры от сервера.
У многих "калькуляторов" этот процесс затягивается.... Во время применения текстур клиент не шлёт пакеты(висит). Так вот сервер отключает игрока через 30 секунд. Как увеличить это время? Рассмотрю все варианты.
 
Тогда я не врубаюсь. Клиент применяет ТЕКСТУРЫ от сервера и висит. Его рубит сервер, по таймауту.
Как может клиент рвать канал, если он висит? Или срабатывает шедулер раньше чем до клиента доходит пакет?
Попробуй во время подгрузки текстур создавать локальное число. И когда оно скажем ровно 20 - посылай пакет и сбрасывай его. (скорее всего не сработает).
Нашел. Дело в классе TCPConnection,
Вот именно там игрока и дисконнектит.
Java:
    /**
     * Checks timeouts and processes all pending read packets.
     */
    public void processReadPackets()
    {
        if (this.sendQueueByteLength > 2097152)
        {
            this.networkShutdown("disconnect.overflow", new Object[0]);
        }

        if (this.readPackets.isEmpty())
        {
            if (this.field_74490_x++ == 1200)
            {
                 ////////////////////////////////////////////////////////
                this.networkShutdown("disconnect.timeout", new Object[0]);
                 ////////////////////////////////////////////////////////
            }
        }
        else
        {
            this.field_74490_x = 0;
        }

        int var1 = 1000;

        while (!this.readPackets.isEmpty() && var1-- >= 0)
        {
            Packet var2 = (Packet)this.readPackets.remove(0);
            var2.processPacket(this.theNetHandler);
        }

        this.wakeThreads();

        if (this.isTerminating && this.readPackets.isEmpty())
        {
            this.theNetHandler.handleErrorMessage(this.terminationReason, this.field_74480_w);
        }
    }
Java:
    /**
     * Shuts down the network with the specified reason. Closes all streams and sockets, spawns NetworkMasterThread to
     * stop reading and writing threads.
     */
    public void networkShutdown(String par1Str, Object ... par2ArrayOfObj)
    {
        if (this.isRunning)
        {
            this.isTerminating = true;
            this.terminationReason = par1Str;
            this.field_74480_w = par2ArrayOfObj;
            this.isRunning = false;
            (new TcpMasterThread(this)).start();

            try
            {
                this.socketInputStream.close();
            }
            catch (Throwable var6)
            {
                ;
            }

            try
            {
                this.socketOutputStream.close();
            }
            catch (Throwable var5)
            {
                ;
            }

            try
            {
                this.networkSocket.close();
            }
            catch (Throwable var4)
            {
                ;
            }

            this.socketInputStream = null;
            this.socketOutputStream = null;
            this.networkSocket = null;
        }
    }
 
Врятли, потому как я за ним смотрел, оно может как быть больше, так и меньше.
Ан нет. Строго больше.
Попробуй во время подгрузки текстур создавать локальное число. И когда оно скажем ровно 20 - посылай пакет и сбрасывай его. (скорее всего не сработает).
Я так и делаю. Я храню данные после входа игрока и слежу за id в пакете от сервера, и по прошествии 25 секунд если клиент не отвечает, отсылаю пакет от имени клиента на сервер последним id(пробовал и все сразу слать).
 
Так что ты должен от клиента послать пакет, либо клиенту, поиграйся с этим.
 
Так что ты должен от клиента послать пакет, либо клиенту, поиграйся с этим.
Клиенту летят пакеты постоянно. А он думает о текстурах.
Проблема в том, что клиент идет не через лаунчер и я не могу с ним ничего сделать. Хоть бери и покупай всем игрокам компы нормальные, что бы текстуры в 30 мб применять успевали меньше чем за 30 секунд 🤓
 
Клиенту летят пакеты постоянно. А он думает о текстурах.
Проблема в том, что клиент идет не через лаунчер и я не могу с ним ничего сделать. Хоть бери и покупай всем игрокам компы нормальные, что бы текстуры в 30 мб применять успевали меньше чем за 30 секунд 🤓
Вообщем, все печально на данный момент... :c
И не 30 секунд, меньше - 20.
 
Напарник сидел с таймером и говорит рубит по 30
 
1.8 с сервером 1.8.8 30 сек Timed out
клинет провисел больше минуты, а сервер его отключил.
тесты на старом ноуте.
я вот думаю помониторить надо бы эти id.... Может там и пинг заодно.Просто прослушать все пакеты на вход/выход
 
Я как понял у тебя банджи есть?
Там вроде в банджи есть функция в конфиге timeout. и вроде значение ее 30000 а это 30 секунд.
 
Не помогло.

Снимок.PNG 1234.jpg
Чёрный, это просто рабочий сервер - видно идёт обмен.
синий, это висячий игрок.
Я так полагаю, что в ProtocolLib пакет отменяется event.setCancelled(true);
Так вот, я прописал на вход и на выход:
Код:
private void packetListener(){
    protocolManager.addPacketListener(
              new PacketAdapter(this, ListenerPriority.NORMAL,
                      PacketType.Play.Client.KEEP_ALIVE) {
                @Override
                public void onPacketReceiving(PacketEvent event) {
                    if (event.getPacketType() == PacketType.Play.Client.KEEP_ALIVE) {
                        event.setCancelled(true);
                    }
                }
            });
    protocolManager.addPacketListener(
              new PacketAdapter(this, ListenerPriority.NORMAL,
                      PacketType.Play.Server.KEEP_ALIVE) {
                @Override
                public void onPacketSending(PacketEvent event) {
                    if (event.getPacketType() == PacketType.Play.Server.KEEP_ALIVE) {
                        event.setCancelled(true);
                    }
                }
            });
  
    }
Прикол в том, что на 1.10.2 меня не выкидывает. Просидел 3 минуты, так и не выкинуло.

Загадка.
 
А я говорил...
Получение или отмена этого пакета никак не повлияет на вермя таймаута на сервере. Смотрите внимательно из каких элементов состоит пайплайн канала, может поймёте.
 
А я говорил...
Получение или отмена этого пакета никак не повлияет на вермя таймаута на сервере. Смотрите внимательно из каких элементов состоит пайплайн канала, может поймёте.
Хорошо, спасибо за наводку. Пошёл.....
 
Назад
Верх Низ