1. Соблюдайте Правила форума и проявляйте уважение к другим участникам беседы.

Задержка комманд

Тема в разделе 'Кодинг/Собственные решения', создана пользователем DhL, 2 фев 2011.

  1. DhL Ньюфаг

    Сообщения:
    36
    Спасибы:
    0
    При установки GHost++ v17.1 почему-то команды стали долго выполнятся (2~4сек)
    Например:
    !pub - после 2-4 сек приходит ответ... на GhostOne такого небыло :)
    В чем может быть проблема?
  2. JiLiZART Администрация

    Сообщения:
    815
    Спасибы:
    35
    Сборка бота GHost:
    Ghost++ 17.1
    Дата начала использования бота:
    12.12.04
    Как долго стоит бот? Такое бывает если база у бота довольно массивная или в это же время что то ещё у него пытаются спросить =), ещё может повлиять сам батл, он может предотвращать спам
  3. DhL Ньюфаг

    Сообщения:
    36
    Спасибы:
    0
    ну боту около месяца. База довольно массивная, но ведь раньше такого не было( на ghostone)
  4. ink08 Ньюфаг

    Сообщения:
    21
    Спасибы:
    0
    тоже заметил , что на ghost++ любые команды выполняются с задержкой 4-6 сек... на ghostone такого не было
    PS: даже с пустой базой 4-6 сек
  5. festival Старожила

    Сообщения:
    368
    Спасибы:
    0
    Это не массивная база. У меня в ~банах 5к строк (3 базы за 2 года слито в 1) и стата ~1к игр, такой проблемы нету.


    Надо глянуть пинг у админа который дает команду и у бота.
    Если у тебя и твоего бота пинг 100 это 1 секунда для отправки, +1 секунда для получения команды и +1 секунда на ответ. Задержка 3 секунды при минимальных нагрузках на ЦП.
    На хосте надо глянуть нагрузку ЦП.
  6. ____ROB____ Старожила

    Сообщения:
    1.008
    Спасибы:
    22
    Сборка бота GHost:
    Ghost One 1.5
    еее... ето масивнаЯ?
  7. festival Старожила

    Сообщения:
    368
    Спасибы:
    0
    Нормальная я считаю, если учесть что обнуление каждые 3 месяца + это не АвтоХост.
  8. Synth (LM) Пантограф!

    Сообщения:
    2.762
    Спасибы:
    172
    Сборка бота GHost:
    My own version of GhostOne
    Дата начала использования бота:
    15.06.2008
    Skype:
    Мой статус
    За 2 года 5к банов О_о
  9. festival Старожила

    Сообщения:
    368
    Спасибы:
    0
    Да, маловато) там же еще в этом списке варны как бы
    Самое печальное, сколько бы банов не было, идиотов хоть отбавляй.
  10. ink08 Ньюфаг

    Сообщения:
    21
    Спасибы:
    0
    решил проблему задержек...
    Сравнив код ghost++ и ghostone заметил, что в ghostone есть ImmediateChatCommand (немедленная отправка) и QueueChatCommand (вот тут и задержка)

    выкладываю diff (файл изменений)
    ps: в нем присутствуют и другие изменения

    bnet.cpp.diff
    Код:
    531,546c531
    < 
    < 	// send immediate commands
    < 		if( !m_OutPackets2.empty( ) && GetTicks( ) - m_LastOutPacketTicks2 >= 45 )
    < 		{
    < 			uint32_t y = m_OutPackets2.size()-1;
    < 			if (y>2)
    < 				y = 2;
    < 			for (uint32_t i=0;i<=y;i++)
    < 			{
    < 				m_Socket->PutBytes( m_OutPackets2.front( ) );
    < 				m_OutPackets2.pop( );
    < 			}
    < 			m_LastOutPacketTicks2 = GetTicks( );
    < 		}
    < 
    < 
    ---
    > 
    1044d1028
    < 				// !B
    1047c1031
    < 				else if( ( Command == "addban" || Command == "ban" || Command == "b" ) && !Payload.empty( ) )
    ---
    > 				else if( ( Command == "addban" || Command == "ban" ) && !Payload.empty( ) )
    1118d1101
    < 				// !AH
    1121c1104
    < 				else if( Command == "autohost" || Command == "ah" )
    ---
    > 				else if( Command == "autohost" )
    1283d1265
    < 				// !AS
    1286c1268
    < 				else if( (Command == "autostart" || Command == "as") && m_GHost->m_CurrentGame && !m_GHost->m_CurrentGame->GetCountDownStarted( ) )
    ---
    > 				else if( Command == "autostart" && m_GHost->m_CurrentGame && !m_GHost->m_CurrentGame->GetCountDownStarted( ) )
    1331d1312
    < 				// !CB
    1334c1315
    < 				else if( (Command == "checkban" || Command == "cb") && !Payload.empty( ) )
    ---
    > 				else if( Command == "checkban" && !Payload.empty( ) )
    1949d1929
    < 				// !RCFG
    2154c2134
    < 						QueueChatCommand( m_GHost->m_Language->RehostDelay(UTIL_ToString(m_GHost->m_AutoRehostDelay)), User, Whisper);
    ---
    > 						QueueChatCommand( m_GHost->m_Language->RehostDelay(UTIL_ToString(m_GHost->m_AutoRehostDelay)));
    2309,2328d2288
    < 
    < void CBNET :: ImmediateChatCommand( string chatCommand )
    < {
    <         if( chatCommand.empty( ) )
    <                 return;
    < 
    <         if( m_LoggedIn )
    <         {
    <                 if( m_PasswordHashType == "pvpgn" && chatCommand.size( ) > m_MaxMessageLength )
    <                         chatCommand = chatCommand.substr( 0, m_MaxMessageLength );
    < 
    <                 if( chatCommand.size( ) > 255 )
    <                         chatCommand = chatCommand.substr( 0, 255 );
    < 
    < //              CONSOLE_Print( "[LOCAL: " + m_ServerAlias + "] " + chatCommand );
    <                 m_OutPackets2.push( m_Protocol->SEND_SID_CHATCOMMAND( chatCommand ) );
    < //              m_Socket->PutBytes( m_Protocol->SEND_SID_CHATCOMMAND( chatCommand ) );
    <         }
    < }
    < 
    2351c2311
    < 
    ---
    > 
    2360,2361c2320
    < //		QueueChatCommand( "/w " + user + " " + chatCommand );
    < 		ImmediateChatCommand( "/w " + user + " " + chatCommand );
    ---
    > 		QueueChatCommand( "/w " + user + " " + chatCommand );
    2418,2431c2377,2380
    < 			if( m_GHost->m_Reconnect )
    < 			{
    < 				if(m_PasswordHashType == "pvpgn")
    < 					m_OutPackets2.push( m_Protocol->SEND_SID_STARTADVEX3( state, UTIL_CreateByteArray( MapGameType, false ), map->GetMapGameFlags( ), MapWidth, MapHeight, gameName, hostName, upTime, "Save\\Multiplayer\\" + saveGame->GetFileNameNoPath( ), saveGame->GetMagicNumber( ), map->GetMapSHA1( ), FixedHostCounter ) );
    < 				else
    < 					m_OutPackets.push( m_Protocol->SEND_SID_STARTADVEX3( state, UTIL_CreateByteArray( MapGameType, false ), map->GetMapGameFlags( ), MapWidth, MapHeight, gameName, hostName, upTime, "Save\\Multiplayer\\" + saveGame->GetFileNameNoPath( ), saveGame->GetMagicNumber( ), map->GetMapSHA1( ), FixedHostCounter ) );
    < 			}
    < 			else
    < 			{
    < 				if(m_PasswordHashType == "pvpgn")
    < 					m_OutPackets2.push( m_Protocol->SEND_SID_STARTADVEX3( state, UTIL_CreateByteArray( MapGameType, false ), map->GetMapGameFlags( ), UTIL_CreateByteArray( (uint16_t)0, false ), UTIL_CreateByteArray( (uint16_t)0, false ), gameName, hostName, upTime, "Save\\Multiplayer\\" + saveGame->GetFileNameNoPath( ), saveGame->GetMagicNumber( ), map->GetMapSHA1( ), FixedHostCounter ) );
    < 				else
    < 					m_OutPackets.push( m_Protocol->SEND_SID_STARTADVEX3( state, UTIL_CreateByteArray( MapGameType, false ), map->GetMapGameFlags( ), UTIL_CreateByteArray( (uint16_t)0, false ), UTIL_CreateByteArray( (uint16_t)0, false ), gameName, hostName, upTime, "Save\\Multiplayer\\" + saveGame->GetFileNameNoPath( ), saveGame->GetMagicNumber( ), map->GetMapSHA1( ), FixedHostCounter ) );
    				
    < 			}
    ---
    > 			if( m_GHost->m_Reconnect )
    > 				m_OutPackets.push( m_Protocol->SEND_SID_STARTADVEX3( state, UTIL_CreateByteArray( MapGameType, false ), map->GetMapGameFlags( ), MapWidth, MapHeight, gameName, hostName, upTime, "Save\\Multiplayer\\" + saveGame->GetFileNameNoPath( ), saveGame->GetMagicNumber( ), map->GetMapSHA1( ), FixedHostCounter ) );
    > 			else
    > 				m_OutPackets.push( m_Protocol->SEND_SID_STARTADVEX3( state, UTIL_CreateByteArray( MapGameType, false ), map->GetMapGameFlags( ), UTIL_CreateByteArray( (uint16_t)0, false ), UTIL_CreateByteArray( (uint16_t)0, false ), gameName, hostName, upTime, "Save\\Multiplayer\\" + saveGame->GetFileNameNoPath( ), saveGame->GetMagicNumber( ), map->GetMapSHA1( ), FixedHostCounter ) );
    2450,2463c2399,2402
    < 			if( m_GHost->m_Reconnect )
    < 			{
    < 				if(m_PasswordHashType == "pvpgn")
    < 					m_OutPackets2.push( m_Protocol->SEND_SID_STARTADVEX3( state, UTIL_CreateByteArray( MapGameType, false ), map->GetMapGameFlags( ), MapWidth, MapHeight, gameName, hostName, upTime, map->GetMapPath( ), map->GetMapCRC( ), map->GetMapSHA1( ), FixedHostCounter ) );
    < 				else
    < 					m_OutPackets.push( m_Protocol->SEND_SID_STARTADVEX3( state, UTIL_CreateByteArray( MapGameType, false ), map->GetMapGameFlags( ), MapWidth, MapHeight, gameName, hostName, upTime, map->GetMapPath( ), map->GetMapCRC( ), map->GetMapSHA1( ), FixedHostCounter ) );
    < 			}
    < 			else
    < 			{
    < 				if(m_PasswordHashType == "pvpgn")
    < 					m_OutPackets2.push( m_Protocol->SEND_SID_STARTADVEX3( state, UTIL_CreateByteArray( MapGameType, false ), map->GetMapGameFlags( ), map->GetMapWidth( ), map->GetMapHeight( ), gameName, hostName, upTime, map->GetMapPath( ), map->GetMapCRC( ), map->GetMapSHA1( ), FixedHostCounter ) );
    < 				else
    < 					m_OutPackets.push( m_Protocol->SEND_SID_STARTADVEX3( state, UTIL_CreateByteArray( MapGameType, false ), map->GetMapGameFlags( ), map->GetMapWidth( ), map->GetMapHeight( ), gameName, hostName, upTime, map->GetMapPath( ), map->GetMapCRC( ), map->GetMapSHA1( ), FixedHostCounter ) );
    < 			}
    ---
    > 			if( m_GHost->m_Reconnect )
    > 				m_OutPackets.push( m_Protocol->SEND_SID_STARTADVEX3( state, UTIL_CreateByteArray( MapGameType, false ), map->GetMapGameFlags( ), MapWidth, MapHeight, gameName, hostName, upTime, map->GetMapPath( ), map->GetMapCRC( ), map->GetMapSHA1( ), FixedHostCounter ) );
    > 			else
    > 				m_OutPackets.push( m_Protocol->SEND_SID_STARTADVEX3( state, UTIL_CreateByteArray( MapGameType, false ), map->GetMapGameFlags( ), map->GetMapWidth( ), map->GetMapHeight( ), gameName, hostName, upTime, map->GetMapPath( ), map->GetMapCRC( ), map->GetMapSHA1( ), FixedHostCounter ) );
    
    bnet.h.diff
    Код:
    69d68
    <       queue<BYTEARRAY> m_OutPackets2;
    113d111
    <       uint32_t m_LastOutPacketTicks2;
    175d172
    <       void ImmediateChatCommand( string chatCommand );
    
    PS: секунда 1сек = 1000мс
  11. Zarj Старожила

    Сообщения:
    1.007
    Спасибы:
    23
    Сборка бота GHost:
    Ghost One 1.7.266
    Дата начала использования бота:
    01.01.1992

    Ты правда веришь что 100мс = 1сек???
  12. Deals Старожила

    Сообщения:
    784
    Спасибы:
    21
    Сборка бота GHost:
    Ghost One 1.7.266
    Skype:
    Мой статус
    Ого. 100 мс - 1 сек. Тогда бы в варике по слайдово все было....
    1000 мс (или еще в боте это тики) = 1 секунда...
  13. festival Старожила

    Сообщения:
    368
    Спасибы:
    0
    А я думал что 100 мс это 1 сек) Потому что ощущал существенную разницу между пингом 20мс и 150мс и кажется что задержка реально в секунду)
    Если я кого-то запутал, извиняюсь.
  14. fake Старожила

    Сообщения:
    1.624
    Спасибы:
    19
    Дата начала использования бота:
    11.11.11
    Смотря какой у тя пинг если пинг LC(как-то так), то пинг делится на пополам .
    вот и выходит что пинг к боту 300 + ~латенси(при пинге 150 динамик латенси 150+) вот и выходит, что делей ~500мс.
    С полсекундным пингом ластхиить в доте нереально (дефолт скорость атаки чара ~1.8) .
  15. festival Старожила

    Сообщения:
    368
    Спасибы:
    0
    А с включенным nagle алгоритмом еще выше задержка будет т.к. собираются мелкие покеты в один, правильно?
    Кто его оставляет включенным а кто выключенным, почему?
  16. Deals Старожила

    Сообщения:
    784
    Спасибы:
    21
    Сборка бота GHost:
    Ghost One 1.7.266
    Skype:
    Мой статус
    Nagle алгоритм в большинстве случаев зависит от компьютера. Реже от интернета.
    У меня когда был слабый комп отключал алгоритм т.к. при хостинге у всех пинг 130+
    А сейчас когда машину обновил - пинг с тремя играми 0+...
    Есть смысл его отключать когда теряются пакеты. И когда слабая машина.