Jump to content
Sign in to follow this  
KhayrusS

MMOCore (2.0) Assíncrono

Recommended Posts

Muito bom KhayrusS, você é um colírio para os olhos. 

Como contribuição vou upar um programa que gerou muita dor de cabeça um tempo atrás, para você analisar se há uma forma de fixar o problema juntamente nessa mudança, pois pelo que lembro a correção era feita no mmocore.

Gostaria de ajudar mais se possível, mas acredito que não é do meu nível de conhecimento tal façanha.

  • I love it 1
  • Thanks 2

.

Share this post


Link to post
Share on other sites
 

Como contribuição vou upar um programa que gerou muita dor de cabeça um tempo atrás, para você analisar se há uma forma de fixar o problema juntamente nessa mudança, pois pelo que lembro a correção era feita no mmocore.

Opa, com certeza analisarei. O próximo passo é utilizá-lo no Gameserver para ver como se comporta, corrigir as falhas que venham acontecer. Depois verificar questões de segurança.

 

Gostaria de ajudar mais se possível, mas acredito que não é do meu nível de conhecimento tal façanha.

Acredito que cada um pode contribuir independente de nível de conhecimento, afinal o conhecimento está por aí pra ser adquirido, quanto maior o desafio mais conhecimento é gerado. Toda ajuda é bem vinda ?

  • Like 1
  • Thanks 1

Share this post


Link to post
Share on other sites

Jamais imaginei que alguém iria mexer nisso, e muito menos dessa forma, incrível.

Tomara que você consiga alcançar os devidos resultados, o foda e o mais triste, que jaja estará sendo implantado em futuros projetos e vai ter gente anunciando (Vendo projeto com MMOCore atualizado 10x mais desempenho) é triste.

Boa sorte com o projeto, estou acompanhando, apesar de não ter conhecimento para contribuir 

  • Like 2
  • Thanks 1

www.l2jservidores.com.br

Interlude / Freya / High Five

Share this post


Link to post
Share on other sites
 

Jamais imaginei que alguém iria mexer nisso, e muito menos dessa forma, incrível.

Tomara que você consiga alcançar os devidos resultados, o foda e o mais triste, que jaja estará sendo implantado em futuros projetos e vai ter gente anunciando (Vendo projeto com MMOCore atualizado 10x mais desempenho) é triste.

Boa sorte com o projeto, estou acompanhando, apesar de não ter conhecimento para contribuir 

É realmente triste ver esse tipo de prática com open source. Eu poderia simplesmente implementar e vender, mas eu faço isso pelo prazer, pelo desafio. Então tento não pensar muito nisso.

 

 

Bom dia campeão!

Também não tenho um conhecimento tão sólido, mas estarei acompanhando o tópico e caso aja algo em que eu possa ajudar, estou a disposição;

O desenvolvimento ainda está no início, tem muitas coisas que planejo fazer, algumas a curto prazo e outras a longo prazo. Com certeza uma mãozinha a mais é sempre bem-vinda. 

O projeto está disponível no github async-mmocore. Assim como um projeto de referência para implementação. Apesar de ter realizado um teste de "sanidade" e não ter encontrado nenhum problema grave. Acredito que ainda existem bugs, mas não tenho tanto tempo para testar. Como eu sou usuário Linux, o teste foi realizado apenas em um Servidor Interlude baseado em L2jServer, pois o cliente interlude pode ser executado em Linux sem muitas dificuldades. Seria interessante utilizar em servidores mais atuais, então se alguém estiver disposto a tentar utilizá-lo,  pode contar com a minha ajuda.

Os próximos passos que pretendo fazer:

  • Escrever uma documentação, inicialmente simples, descrevendo como utilizá-lo;
  • Criar uma wiki com as principais dificuldades e suas prováveis resoluções;
  • Documentar e melhorar o código.

Quando tiver um tempo irei atualizar o post principal e o wiki do projeto no github.

 

[ ]'s

  • Like 3

Share this post


Link to post
Share on other sites
 

 

Não pensa nisso mesmo, tem gente que faz? Tem! Mas o lineage 2 também não é tão nosso para apontarmos o dedo para isso.

Com esse pensamento de não compartilhar por que vão vender, se todos pensassem assim ninguém nunca teria feito nada. Uma coisa é você fazer para si, para utilizar, etc, entendível a questão de não compartilhar. Mas fazer pensando em não postar por que vão vender é meio sei lá, eu não pensaria assim, nem penso. Tenho algumas tralhas feitas, e provavelmente que quando não for utilizar postarei tudo.

  • Like 1

.

Share this post


Link to post
Share on other sites
 

Não pensa nisso mesmo, tem gente que faz? Tem! Mas o lineage 2 também não é tão nosso para apontarmos o dedo para isso.

Com esse pensamento de não compartilhar por que vão vender, se todos pensassem assim ninguém nunca teria feito nada. Uma coisa é você fazer para si, para utilizar, etc, entendível a questão de não compartilhar. Mas fazer pensando em não postar por que vão vender é meio sei lá, eu não pensaria assim, nem penso. Tenho algumas tralhas feitas, e provavelmente que quando não for utilizar postarei tudo.

Infelizmente tu sabe que é assim que funciona, caras como @KhayrusS criam, mas quem ganha com isso não são os desenvolvedores.

Porque sempre tem uns "zé ruela" que vem aqui o fórum pegam as coisas e vão pro facebook vender, quando não mandam mp querendo vender aqui no fórum mesmo.

# FATO


NHEpml4.png

Share this post


Link to post
Share on other sites
 

Falta só colocar online para saber as possíveis falhas? Ou existe outra maneira de se obter isso?

Eu já fiz alguns testes básicos, mas ainda é necessário ver como é comportamento com vários players logados. Ainda existe a probabilidade de haver falhas que seriam evidenciadas ao colocar online, embora eu não planeje colocar um servidor para teste por agora, nem aconselho que usem em servidores reais por enquanto. Como não tenho tanto tempo pra fazer um teste real em um servidor online nesse momento, ficarei esperando algum aventureiro tentar usá-lo e reportar os bugs que surgirem.

Alguém que tenha conhecimento sólido em Java já é capaz de utilizá-lo, em teoria em poucos passos:

  1. Compilar o mmocore disponível no repósitorio do github;
  2. Colocá-lo no classpath do projeto que pretende utilizar;
  3. Realizar as mudanças necessárias para utilizar as novas classes. 

 

Há algumas mudanças necessárias nas chamadas de método dos Packets, que provavelmente tendem a ser mais demoradas devido a quantidade de Classes existentes. Com relação a mudança do mmocore em si, basicamente o que precisa ser feito é substituir essa parte do código*:

// TODO: Unhardcode this configuration options
final SelectorConfig sc = new SelectorConfig();
sc.MAX_READ_PER_PASS = 12; // Config.MMO_MAX_READ_PER_PASS;
sc.MAX_SEND_PER_PASS = 12; // Config.MMO_MAX_SEND_PER_PASS;
sc.SLEEP_TIME = 20; // Config.MMO_SELECTOR_SLEEP_TIME;
sc.HELPER_BUFFER_COUNT = 20; // Config.MMO_HELPER_BUFFER_COUNT;
sc.TCP_NODELAY = false; // Config.MMO_TCP_NODELAY;

L2GamePacketHandler gph = new L2GamePacketHandler();
_selectorThread = new SelectorThread<>(sc, gph, gph, gph, new IPv4Filter());
InetAddress bindAddress = null;
if (!Config.GAMESERVER_HOSTNAME.equals("*")) {
    try {
        bindAddress = InetAddress.getByName(Config.GAMESERVER_HOSTNAME);
    } catch (UnknownHostException e1) {
        _log.error( getMessage("error.invalid.bind.address",  e1.getMessage()), e1); 
    }
}

try {
	_selectorThread.openServerSocket(bindAddress, Config.PORT_GAME);
} catch (IOException e) {
	_log.error( getMessage("error.open.socket", e.getMessage()), e);
    System.exit(1);
}

_selectorThread.start();

por essa:

L2GamePacketHandler gph = new L2GamePacketHandler();

InetSocketAddress bindAddress;
if (!Config.GAMESERVER_HOSTNAME.equals("*")) {
	bindAddress =  new InetSocketAddress(Config.GAMESERVER_HOSTNAME, Config.PORT_GAME);
} else {
	bindAddress = new InetSocketAddress(Config.PORT_GAME);
}

connectionHandler = ConnectionBuilder.create(bindAddress, gph,gph,gph).filter(new IPv4Filter()).build();
connectionHandler.start();

 

Contudo, há mudanças de hierarquia em L2GamePacketHandler e no Ipv4Filter. Essas alterações entre outros detalhes postarei depois quando estiver com um pouco mais de tempo.

Essas e as outras mudanças necessárias podem ser encontradas nesse repositório.

* Essa mudança está utilizando como base L2jserver.

 

 

[ ]'s

  • Like 4

Share this post


Link to post
Share on other sites

São essas coisas que fazem você um dos melhores membros do fórum. Desde 2008 até hoje!

Parabéns, brother. Que maravilha de tópico. Com toda certeza irei estudar um pouco sobre o assunto.

  • Like 1

Possui alguma dúvida em relação à configurações comuns de servidores de Lineage II? Consulte nossa área de Principais Dúvidas Resolvidas.

 

Atenção: Eu não dou suporte por MP, nem por nenhum meio de contato fora do L2J Brasil. Caso insista, será bloqueado e excluído.

 

Share this post


Link to post
Share on other sites
 

São essas coisas que fazem você um dos melhores membros do fórum. Desde 2008 até hoje!

Parabéns, brother. Que maravilha de tópico. Com toda certeza irei estudar um pouco sobre o assunto.

Obrigado, brother ?

 

Adicionei uma descrição básica de como usar no githubE a primeira alpha release.

  • Like 2

Share this post


Link to post
Share on other sites
 

Foi testada com quantos jogadores online?

Não foi realizado testes relacionados a quantidade de jogadores online. Esse tipo de teste sairia do escopo do projeto, além de ser um teste difícil de realizar, difícil de mensurar e altamente custoso. Os testes são realizados utilizando Jmeter. O último teste que realizei, há um tempo, foram considerados 5000 usuários concorrentes enviando 10000 pacotes,  os pacotes foram entregues em menos de 1s. Infelizmente tive um problema com a infraestrutura que utilizei pro teste, e acabei perdendo os dados. No momento, estou um pouco sem tempo pra provisionar tudo outra vez e realizar um novo teste com a última versão, mas assim que der realizarei.

  • Like 2

Share this post


Link to post
Share on other sites
Em 25/09/2018 at 15:57, KhayrusS disse:

 

MMOCore utilizando Selector:
_________________________________________________________________
|Players  | Média | Min  | Max    | D. Padrão | Throughput |Erro |
|----------------------------------------------------------------|
|998	  | 60ms  | 43ms | 101ms  | 8.68      |   487.3/s  |0.0	 |  
|1999	  | 62ms  | 44ms | 115ms  | 9.01      |   769.73/s |0.0	 |  
|3993	  | 100ms | 42ms | 1261ms | 190.44    |   733.60/s |0.0	 |  
|7988	  | 411ms | 43ms | 7285ms | 889.66    |   807.27/s |0.0	 |  
|31976	  | 804ms | 6ms	 | 8792ms | 1628.33   |   769.96/s |11,3%|
 ͞ ͞ ͞ ͞ ͞ ͞ ͞͞ ͞ ͞ ͞ ͞ ͞ ͞ ͞ ͞͞ ͞ ͞ ͞ ͞ ͞ ͞͞ ͞ ͞ ͞ ͞ ͞ ͞ ͞ ͞͞ ͞ ͞ ͞ ͞ ͞ ͞͞ ͞ ͞ ͞ ͞ ͞ ͞ ͞ ͞͞ ͞ ͞ ͞ ͞ ͞ ͞͞ ͞ ͞ ͞ ͞ ͞ ͞ ͞ ͞͞ ͞ ͞ ͞ ͞ ͞ ͞͞ ͞
 MMOCore Assíncrono (2.0)
 _________________________________________________________________
|Players  | Média  | Min | Max    | D. Padrão | Throughput |Erro  |
|-----------------------------------------------------------------|
|1000	  |1ms	   |0ms	 |45ms	  |4.94	      |539.08      |0.0   |  
|2000	  |1ms	   |0ms	 |55ms	  |4.34	      |764.81      |0.0   |	  
|4000	  |2ms	   |0ms	 |64ms	  |4.62	      |804.50      |0.0   |	  
|8000	  |1ms	   |0ms	 |152ms	  |6.13	      |1106.19     |0.0   |	  
|32000	  |726ms   |0ms	 |45,159s |2060.37    |696.06      |11,7% |
 ͞ ͞ ͞ ͞ ͞ ͞ ͞͞ ͞ ͞ ͞ ͞ ͞ ͞ ͞ ͞͞ ͞ ͞ ͞ ͞ ͞ ͞͞ ͞ ͞ ͞ ͞ ͞ ͞ ͞ ͞͞ ͞ ͞ ͞ ͞ ͞ ͞͞ ͞ ͞ ͞ ͞ ͞ ͞ ͞ ͞͞ ͞ ͞ ͞ ͞ ͞ ͞͞ ͞ ͞ ͞ ͞ ͞ ͞ ͞ ͞͞ ͞ ͞ ͞ ͞ ͞ ͞͞ ͞ ͞

 

 

 

Eu não sei se você sabe interpretar essas informações do jmeter, mas vou tentar sintetizar aqui pra você:

 

No primeiro caso usando o Selector, você tem uma variação  quase na mesma proporção no Throughput de 1000 (998 falha de 2 que não foi computado) para 2000(falha de 1 que não foi computado) players (50%)  porém a variação de 2000 para 4000 é quase a mesma, ali está o ponto que dá lag, o Throughput deveria crescer de forma proporcional ao Throughput, então pode-se concluir que o limite nessa sua configuração é por volta de 2000 players (se o pacote fosse estável e constante, mas sabemos que é variado então pode variar pra mais ou menos). É natural que assim que você aumentar a quantidade de usuários você tenha aumento de Throughput, pois significa que vc tem mais usuários e precisa enviar mais requisições.

No caso com o MMOCore Assíncrono é um pouco diferente temos um Throughput crescendo junto com o número de usuários atingindo o limite de proporção 8:1 com 8 mil usuários, provavelmente por alguma limitação de hardware ou rede (que só se sanaria com uma escala horizontal dos recursos de hardware). O que representa um ganho muito bom!  Olhando por alto,  além de um tempo de resposta menor  por ser assíncrono é normal já que a conexão é terminada antes do processamento, o  Desvio Padrão bem estável também até 8000 mil usuários, quebrando somente em algum lugar entre 8000 e 32000 .

Arrisco que o ganho do  MMOCore Assíncrono é cerca de 5x ou 6x maior em comparação ao Selector e tenho certeza que da pra polir mais isso ai. Players que jogarem em servidores com essa tecnologia certamente terão uma experiência muito mais fluída de jogo.

 

 

@KhayrusS Seria interessante linkar esse tópico no readme do projeto , ajudaria o fórum certamente ?

  • I love it 1

EJoOSOj.gif

Sua pergunta foi respondida? Certifique-se de marcar a resposta como a solução aceita.
Se existe mais de uma resposta, utilize o "vote up" para destacá-la.
Se você achar uma resposta útil, diga obrigado clicando no botão "Gostei".

Share this post


Link to post
Share on other sites

@Grundor Obrigado pelas observações ?. Ainda tenho algumas modificações pra fazer no tópico, mas meu tempo anda curto pra fazer algo elaborado que acrescente um pouco de valor.

 

18 horas atrás, Grundor disse:

@KhayrusS Seria interessante linkar esse tópico no readme do projeto , ajudaria o fórum certamente ?

Assim que fizer o próximo commit adicionarei ?

  • I love it 2

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  



     



  • Recently Browsing

    No registered users viewing this page.

  • Posts

    • Cai de paraquedas aqui.
    • Eu tinha "customer" na l2jnetwork.
    • Perdi 1h do meu tempo olhando cada comentario aqui nesse seu poste e sabe oque no final eu olhei ? Um caramada dando a tal atencao pra algo que foi jogado com erros, espero que voce Christian-SDM chegue mas longe viu . PARABENS MLQ, voce e unico que eu vejo aqui dando o tal suporte sem quere tirar lucro encima disso
    • Christian-SDM FAZ O QUE ELES TE PEDE BROTHER , VOCÊ É BOM NO QUE FAZ. FAZ TUTORIAIS, VIDEOS ETC.. SE ALGUÉM NÃO ENTENDER. QUE PERGUNTE NO TÓPICO OU TE MANDE UM PM.
    • A Regra diz justamente isso  Meu caro, as regras existem de vc chegar nessa comunidade, não é pq vc não concorda que vc vai mudá-las,  entende?  Você pode estar fazendo uma boa ação, mas pessoas podem utilizar dessa técnica para aplicar golpes e por isso ela não é permitida. Não estou julgando pro vc estar fazendo isso, mas vc ajudar via teamviwer está ajudando 1, vc incentivar ele a postar a duvida e vc responder vc ajudará centenas.  viu a diferença? Você pode fazer lives explicando como fazer algo, pode criar video tutoriais, novos tutoriais, casos de uso, enfim, vc pode ajudar e vc quer fazer isso pelo que entendi.   O que o moderador lhe sugeriu é o correto, ele apenas não lhe advertiu na primeira vez, por isso foi necessário fazer novamente, vc não deve criar essa prática nem essa cultura do suporte exclusivo, isso aqui é uma comunidade aberta, a dúvida de um pode ser a dúvida do outro amanhã e por isso somos quem somos hj pq muitos vão pro google pesquisar e nos encontram.   Meu "puxão de orelha" não é para lhe desanimar, pelo contrário, meu objetivo é justamente o contrário, eu quero com que vc participe e colabora exatamente como está fazendo, mas precisa entender que há limites e regras para que a comunidade continue a funcionar como está a 11 anos.   Qualquer outra dúvida ou resposta ao que postei favor encaminhar para minha caixa de mensagem privada para não poluir o tópico com esse assunto.
    • como vai atualizar pra 382, se essa revisão foi completamente alterada, a base foi retirada do site oficial da acis do tryskell, mas varios programadores trabalharam nesse pack, acredito eu!, nem a versão eu encontrei dentro do core, é completamente diferente da acis do tryskell, outras palavras, foi modificado.
    • ta normal amigo. mato raid bosses eles some na hora, e aparece no .raidinfo, ja os grand bosses, alguns demoram um pouco, dando //kill,  o sistema do jogo demora pra reconhecer, como queen ant e zaken por exemplo, mas ja baium ele some rapidamente, olha video ate o final, demorou mas ele some. E aparece normalmente no .raidinfo. Testa com char normal, e de preferencia online, porque online ele tem  delay e  o sistema trabalha melhor 😄    
    • bom meu querido olha ai o rapas deu report nos boss... :) :v
×
×
  • Create New...