Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
маленткая производительность сервер Java
#1
изаю исходник Java от pbdev переделал режим игра использую PBRU
но есть маленькая проблемка меленькая производтельность
больше 50 игроков сервер не потянет
из за сценария боя RoomTask
[SRC="java"]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));
}
}
}

[/SRC]
как быть и что надо переписать и оптимизировать зарание спасибо за помошь
Ответ
#2
Когда я такое вижу, у меня один вопрос, вас заставили писать этот код?
После третьего if я уже не захотел разбираться.
Ответ
#3
это не я писал этот код а PBDev
[SRC="java"]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());
}
}
}
}







[/SRC]
Ответ
#4
slawa560 Написал:что надо переписать

[Изображение: 6Rs52oDNFyk.jpg]
Ответ
#5
room.preStart == true умиляет Big Grin
а вообще лучше вЫкинуть этот кусок от гов*а PBDev и забыть о его существовании
Ответ
#6
Alay Написал:room.preStart == true умиляет Big Grin
а вообще лучше вЫкинуть этот кусок от гов*а PBDev и забыть о его существовании

Не припоминаю такой кусок кода... разве что в ранних версиях сервера херней страдал...
Ответ
#7
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();
        }
Ответ
#8
Этому серверу уже столько лет, а его все еще ковыряют...
Лучше взять и изобрести завтрашний день, чем переживать о том, что вчерашний был так себе.
Ответ
#9
Бедный феликс перевернулся бы в гробу увидев такой код в форке своего сервера :redlol:
m0nster.art - clear client patches, linkz to utils & code.
Гадаю по капче.
Ответ
#10
n3k0nation Написал:Бедный феликс перевернулся бы в гробу увидев такой код в форке своего сервера :redlol:

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


Возможно похожие темы ...
Тема Автор Ответы Просмотры Последний пост
  сервер от Point Balnk 3,24 до 3,66 indice201 0 3,125 12-25-2021, 09:38 PM
Последний пост: indice201
  Russian 3.16 хочу писать сервер zOne62 2 4,166 02-12-2020, 09:54 AM
Последний пост: zOne62
  После перезахода сервер отказываеться видить клиент slawa560 6 2,429 08-08-2017, 11:26 PM
Последний пост: slawa560
  error in java TomCodder 6 2,595 07-06-2017, 09:07 AM
Последний пост: TomCodder
  Point Blank BR - Server Souce JAVA XJhonny 1 2,693 12-23-2016, 08:55 AM
Последний пост: djnansr
  XML C# to Java Exile03 1 2,493 02-19-2016, 10:32 PM
Последний пост: PROGRAMMATOR
  Java Someone know how i can fix Player Respawn BUG Exile03 1 2,355 12-06-2015, 04:54 PM
Последний пост: PROGRAMMATOR

Перейти к форуму:


Пользователи, просматривающие эту тему: 1 Гость(ей)