[Point Blank] маленткая производительность сервер Java - Форум администраторов игровых серверов
Форум администраторов игровых серверов StormWall - Защита от DDos атак
Регистрация Мнения Справка Пользователи Календарь Все разделы прочитаны
Вернуться   Форум администраторов игровых серверов > MMO > Point Blank (Piercing Blow)

Point Blank (Piercing Blow)
Общие вопросы по написанию эмулятора. General questions on developing emulator. При поддержке: Lucera 2 - разработка Java Interlude

Ответ
Опции темы
Непрочитано 09.08.2017, 21:22   #1
Пользователь

Автор темы (Топик Стартер) маленткая производительность сервер Java

изаю исходник Java от pbdev переделал режим игра использую PBRU
но есть маленькая проблемка меленькая производтельность
больше 50 игроков сервер не потянет
из за сценария боя RoomTask
public class GRoomTask implements IRoomTask 
{
 
	@Override
	public void run(int channel, Room room) 
	{
		int countPlayerPrestart = 0;
		int redTeamReady = 0; 
		int blueTeamReady = 0;
 
		for(Player player : room.getPlayers().values()) 
		{
			RoomSlot slot = room.getRoomSlotByPlayer(player);
			if (slot.getState().ordinal() > 8 && slot.getState().ordinal() < 12) 
			{
				countPlayerPrestart++;
			}
			else
                {
				if(room.getSpecial() != 6) 
				{
					if(slot.getId() % 2 == 0)
					{
						redTeamReady+=1;
					}
					else
					{
						blueTeamReady+=1;
					}
				}
			}
		}
		RoomSlot leader = room.getRoomSlotByPlayer(room.getLeader());
		if(leader.getState().ordinal() < 13) 
		{
			if (redTeamReady > 0 && blueTeamReady > 0 || countPlayerPrestart == 0) {
				if(leader.getState().ordinal() < 13 ) 
				{
					for (Player member : room.getPlayers().values()) 
					{
						RoomSlot playerSlot = room.getRoomSlotByPlayer(member);
						if (playerSlot.getState() == SlotState.SLOT_STATE_BATTLE_READY) 
						{
							playerSlot.setState(SlotState.SLOT_STATE_BATTLE);
							member.getConnection().sendPacket(new SM_BATTLE_PLAYER_INFO(room, member));
							for (Player toSend : room.getPlayers().values()) 
							{
								if (!toSend.equals(member)) 
								{
									RoomSlot toSendplayerSlot = room.getRoomSlotByPlayer(toSend);
									if (toSendplayerSlot.getState().ordinal() > 11)
										member.getConnection().sendPacket(new SM_BATTLE_PLAYER_INFO(room, toSend));
								}
							}
							member.getConnection().sendPacket(new SM_UNK_3865());
							member.getConnection().sendPacket(new SM_BATTLE_ROUND_START(room));
							BattleServerInfo bsi = BattleServerController.getInstance().getBattleServerInfo(40000);
							if (bsi != null) {
								if (bsi.getConnection() != null) 
								{
									if (room.getRoomSlotByPlayer(member).getState().ordinal() > 8) 
									{
										bsi.getConnection().sendPacket(new SM_REQUEST_READY_BATTLE_ROOM(room, member, channel));
									}
								}
							}
						}
					}
				}
			}
		}
		else 
		{
			for(Player player : room.getPlayers().values()) 
			{
				RoomSlot playerSlot = room.getRoomSlotByPlayer(player);
				if(playerSlot.getState().ordinal() == 12) {
					player.getConnection().sendPacket(new SM_BATTLE_BOT_INFO(room));
					playerSlot.setState(SlotState.SLOT_STATE_BATTLE);
					player.getConnection().sendPacket(new SM_BATTLE_PLAYER_INFO(room, player));
					for(Player player1 : room.getPlayers().values()) {
						RoomSlot why = room.getRoomSlotByPlayer(player1);
						if(why.getState().ordinal() == 13 && !player.equals(player1)) 
						{
							player1.getConnection().sendPacket(new SM_BATTLE_PLAYER_INFO(room, player));
							player.getConnection().sendPacket(new SM_BATTLE_PLAYER_INFO(room, player1));
						}
					}
					player.getConnection().sendPacket(new SM_UNK_3865());
					player.getConnection().sendPacket(new SM_BATTLE_ROUND_START(room));
					BattleServerInfo bsi = BattleServerController.getInstance().getBattleServerInfo(40000);
					if (bsi != null) {
						if (bsi.getConnection() != null) {
							if (room.getRoomSlotByPlayer(player).getState().ordinal() > 8) {
								bsi.getConnection().sendPacket(new SM_REQUEST_READY_BATTLE_ROOM(room, player, channel));
							}
						}
					}
				}
			}
		}
		for(Player player : room.getPlayers().values())
		{	
			player.getConnection().sendPacket(new SM_ROOM_INFO(room));
		}
	}
}
 
 
Code: Java
как быть и что надо переписать и оптимизировать зарание спасибо за помошь
slawa560 вне форума Ответить с цитированием
Непрочитано 09.08.2017, 23:25   #2
Аватар для PROGRAMMATOR
Администратор

По умолчанию Re: маленткая производительность сервер Java

Когда я такое вижу, у меня один вопрос, вас заставили писать этот код?
После третьего if я уже не захотел разбираться.
__________________
composer require laravel/framework
yarn add vue
PROGRAMMATOR вне форума Отправить сообщение для PROGRAMMATOR с помощью ICQ Отправить сообщение для PROGRAMMATOR с помощью Skype™ Ответить с цитированием
Непрочитано 09.08.2017, 23:54   #3
Пользователь

Автор темы (Топик Стартер) Re: маленткая производительность сервер Java

это не я писал этот код а PBDev
for(Player player : room.getPlayers().values()) {
			player.getConnection().sendPacket(new SM_ROOM_INFO(room));
		}
		int num = 0;
		for(Player member : room.getPlayers().values()){
			RoomSlot slot = room.getRoomSlotByPlayer(member);
			if(slot.getState().ordinal() > 8 && slot.getState().ordinal() < 12)
			{
		       //room.Spawner();
				boolean ok = false;
				boolean mustDinoSpawn = false;
				if(room.preStart == true && room.Started == false)
			    room.dinoListed = new ArrayList<Player>();
				for(Player player : room.getPlayers().values()){
					RoomSlot slot2 = room.getRoomSlotByPlayer(player);
					if(slot.getState() == SlotState.SLOT_STATE_BATTLE_READY){
						if(room.preStart == true && room.Started == false){
							room.changeSlotState(slot.getId(), SlotState.SLOT_STATE_BATTLE, true);
							for(Player toSend : room.getPlayers().values()){
								if(room.getRoomSlotByPlayer(toSend).getState().ordinal() > 7){
									toSend.getConnection().sendPacket(new SM_BATTLE_PLAYER_INFO(room, player, 0));
								}
							}
							player.getConnection().sendPacket(new SM_UNK_3865(room));
		                    if(room.getType() == 7 || room.getType() == 12)
		                    {
		                    	room.dinoListed.add(player);
		                    	mustDinoSpawn = true;
		                    }
		                    else
		                    {
		                    	player.getConnection().sendPacket(new SM_BATTLE_ROUND_START(room, 0));
		                    }
 
		                    player.bST = DateTimeUtil.getDateTime();
						}
						else if(room.Started)
						{
							room.changeSlotState(slot.getId(), SlotState.SLOT_STATE_BATTLE, true);
							if(room.getType() == 2 || room.getType() == 4)
								slot.Ghost = true;
 
							for(Player pRall : room.getPlayers().values())
								if(room.getRoomSlotByPlayer(pRall).getState().ordinal() > 7)
									pRall.getConnection().sendPacket(new SM_BATTLE_PLAYER_INFO(room, player, 1));
 
							if(room.getType() != 2 && room.getType() != 4)
							player.getConnection().sendPacket(new SM_UNK_3865(room));
							player.getConnection().sendPacket(new SM_BATTLE_ROUND_START(room, 1));
							player.getConnection().sendPacket(new SM_BATTLE_SCORE(room));
							player.bST = DateTimeUtil.getDateTime();
						}
 
						BattleServerInfo bsi = BattleServerController.getInstance().getBattleServerInfo(40000);
						if (bsi != null) {
							if (bsi.getConnection() != null) {
								if (room.getRoomSlotByPlayer(player).getState().ordinal() > 8) {
									bsi.getConnection().sendPacket(new SM_REQUEST_READY_BATTLE_ROOM(room, player, player.Channel));
								}
							}
						}
					}
					if(player == room.getLeader())
						ok = true;
				}
				if(ok == true)
					room.Started = true;
 
				if(mustDinoSpawn)
				{
					DinoDelay waited = new DinoDelay(room);
					Timer t = new Timer();
					t.schedule(waited, 5250);
				}
			}
	     }
	}
	class DinoDelay extends TimerTask {
		Room room;
		public DinoDelay(Room room) {
			this.room = room;
		}
 
		public void run() {
			try{
        			for(Player member : room.dinoListed){
    					member.getConnection().sendPacket(new SM_BATTLE_ROUND_START(room, 0));
    				}
        	}catch(Exception e){
        		System.out.println("Error spawner: " + e.toString());
        	}
		}
	}
}
 
 
 
 
 
 
 
 
Code: Java
slawa560 вне форума Ответить с цитированием
Непрочитано 10.08.2017, 00:02   #4
Аватар для Hack
Пользователь

По умолчанию Re: маленткая производительность сервер Java

Цитата:
Сообщение от slawa560 Посмотреть сообщение
что надо переписать
Hack вне форума Отправить сообщение для Hack с помощью Skype™ Ответить с цитированием
Сказали спасибо:
Непрочитано 10.08.2017, 01:35   #5
Пользователь

По умолчанию Re: маленткая производительность сервер Java

room.preStart == true умиляет
а вообще лучше вЫкинуть этот кусок от гов*а PBDev и забыть о его существовании
Alay вне форума Ответить с цитированием
Непрочитано 10.08.2017, 03:05   #6
Аватар для DarkSkeleton12
Пользователь

По умолчанию Re: маленткая производительность сервер Java

Цитата:
Сообщение от Alay Посмотреть сообщение
room.preStart == true умиляет
а вообще лучше вЫкинуть этот кусок от гов*а PBDev и забыть о его существовании
Не припоминаю такой кусок кода... разве что в ранних версиях сервера херней страдал...
DarkSkeleton12 вне форума Отправить сообщение для DarkSkeleton12 с помощью Skype™ Ответить с цитированием
Непрочитано 10.08.2017, 14:30   #7
Пользователь

По умолчанию Re: маленткая производительность сервер Java

Цитата:
Сообщение от DarkSkeleton12 Посмотреть сообщение
Не припоминаю такой кусок кода... разве что в ранних версиях сервера херней страдал...
На сколько я понял этот код писали вы. Лучше забыть про такой стить ветвлений
Код:
        private void PacketRecivedCallback(IAsyncResult asyncResult)
        {
            var resivedTime = Time.TimeNowInMs;
            if (ValidateConnection())
            {
                int resivedByteCount;
                try { resivedByteCount = Socket.EndReceive(asyncResult); }
                catch (Exception)
                {
                    Globals.Logger.DebugN("Клиент разорвал соединение.");
                    Close();
                    return;
                }
                if (resivedByteCount > 2)
                {
                    var bufferOffset = 0;
                    while (!TryToReadPackets(ref bufferOffset, resivedByteCount, resivedTime)) ;
                    if (ConnectionState == ConnectionState.Inited)
                    {
                        StartListenNextPacket();
                        return;
                    }
                }
                Globals.Logger.DebugN($"Соединение {this} будет закрыто. Причина: Размер пришедшего пакета меньше или равен двум");
                Close();
            }
        }
Ведь тот же самый код может выглядеть более читабельным если отбрасывать определенные условия от обратного
Код:
        private void PacketRecivedCallback(IAsyncResult asyncResult)
        {
            var resivedTime = Time.TimeNowInMs;
            if (!ValidateConnection()) return;
            int resivedByteCount;
            try { resivedByteCount = Socket.EndReceive(asyncResult); }
            catch (Exception)
            {
                Globals.Logger.DebugN("Клиент разорвал соединение.");
                Close();
                return;
            }
            if (resivedByteCount <= 2)
            {
                Globals.Logger.DebugN($"Соединение {this} будет закрыто. Причина: Размер пришедшего пакета меньше или равен двум");
                Close();
                return;
            }
            var bufferOffset = 0;
            // ReSharper disable once EmptyEmbeddedStatement
            while (!TryToReadPackets(ref bufferOffset, resivedByteCount, resivedTime));
            if (ConnectionState != ConnectionState.Inited) return;
            StartListenNextPacket();
        }
Alay вне форума Ответить с цитированием
Непрочитано 10.08.2017, 22:28   #8
Аватар для Sojang
Пользователь

По умолчанию Re: маленткая производительность сервер Java

Этому серверу уже столько лет, а его все еще ковыряют...
__________________
Лучше взять и изобрести завтрашний день, чем переживать о том, что вчерашний был так себе.
Sojang вне форума Ответить с цитированием
Непрочитано 10.08.2017, 22:47   #9
Аватар для n3k0nation
Antihero

По умолчанию Re: маленткая производительность сервер Java

Бедный феликс перевернулся бы в гробу увидев такой код в форке своего сервера
__________________
m0nster.art - clear client patches, linkz to utils & code.
Гадаю по капче.
n3k0nation вне форума Ответить с цитированием
Непрочитано 10.08.2017, 23:01   #10
Аватар для Sojang
Пользователь

По умолчанию Re: маленткая производительность сервер Java

Цитата:
Сообщение от n3k0nation Посмотреть сообщение
Бедный феликс перевернулся бы в гробу увидев такой код в форке своего сервера
Ну так он видел этот код. Он участвовал в разработке этих исходов
__________________
Лучше взять и изобрести завтрашний день, чем переживать о том, что вчерашний был так себе.
Sojang вне форума Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Падает npc сервер на java Apofis Lineage II 5 22.09.2014 21:00
Java Сервер. zend Рынок / Marketplace 8 13.10.2013 10:33
Java Сервер PSIFAK World of WarCraft 1 14.10.2012 14:13
Кладем Java-сервер? LeMoN Lineage II 24 23.03.2012 22:15
Windows XP x64, производительность? lvs Курилка / Yak floor 5 06.03.2009 14:36


© 2007–2024 «Форум администраторов игровых серверов»
Защита сайта от DDoS атак — StormWall
Работает на Булке неизвестной версии с переводом от zCarot
Текущее время: 00:00. Часовой пояс GMT +3.

Вверх