Como funcionam servidores?

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

Como funcionam servidores?

Mensagem por Thomaz em Ter 31 Jan 2012, 19:11

Eu já consegui fazer meu jogo funcionar online só que estou com um pequeno problema de sincronização.

Na minha dúvida eu não preciso de códigos, só preciso saber como que ele funciona:

No meu jogo eu tentei mandar mensagens que identificam quando botões são pressionados. Só que o jogo fica absurdamente não sincronizado.

Tentei mandar mensagens que mandarão posições, só que o jogo dá crash toda vez que entra mais de um player. Além de ter um delay absurdo(pelo fato de mandar mensagens a cada step)

Tentei mandar uma combinação dos dois só que o servidor continua não sincronizado com o cliente.
O meu servidor funciona de boa numa conexão local, só que esse problema de não ser sincronizado surge quando eu vou por uma conexão online.(Só espero que entendam que meu problema não é delay, é que o jogo não recebe as mensagens com o mesmo intervalo que a pessoa clica no outro computador.)

DÚVIDA:
Então eu venho aqui pedir a vocês tutoriais, ideias, matérias ou qualquer coisa que possa me ensinar como funciona REALMENTE um servidor.


Caso não tenha entendido qual o meu problema e queira um explicação melhor para me explicar diretamente qual o meu erro sinta-se livre para dizer que não entendeu eu tentarei explicar melhor. Apesar que meu pedido são materiais de estudo é bem melhor uma explicação mais direta Smile


Última edição por Thomaz em Sab 03 Mar 2012, 13:36, editado 1 vez(es)

Thomaz

Ranking : Nota A
Número de Mensagens : 106
Idade : 21
Data de inscrição : 13/10/2011
Notas recebidas : A
Reputação : 4
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://bigleafeater.tumblr.com/

Voltar ao Topo Ir em baixo

Re: Como funcionam servidores?

Mensagem por vinians em Ter 31 Jan 2012, 20:25

Amigo, já fiz alguns servidores de teste e funciona perfeitamente. A base é o seguinte:
1-Você tem uma aplicação servidora DEDICADA, essa aplicação nao é cliente somente serve e pode ser feita até em Delphi por exemplo pra ficar mais rapido.
2-Os cliente recebe informações de ENTRADA (mouse, teclado, etc) e depois ENVIA para o servidor.
3-O CLIENTE aguarda dados do SERVIDOR
4-O SERVIDOR recebe as informações dos CLIENTES e as envia para TODOS os clientes.
5-Os CLIENTES recebem as informações do SERVIDOR a atualizam as posições de suas instâncias.
6-Volta para 2

Básicamente (eu disse basicamente) seria isso. Não sei como sua aplicação esta desenvolvida por isso fiz um algoritmo genérico.
Flws

vinians

Ranking : Nota B
Número de Mensagens : 2490
Idade : 27
Data de inscrição : 18/09/2008
Notas recebidas : B-C-A-C
Reputação : 52
Insignia 1 x 0 Insignia 2 x 1 Insignia 3 x 0
Prêmios
   : 0
   : 2
   : 1

http://xcreatorgames.weebly.com/

Voltar ao Topo Ir em baixo

Re: Como funcionam servidores?

Mensagem por Thomaz em Ter 31 Jan 2012, 23:06

Talvez eu esteja pedindo de mais, não sei... você até deu um algorítmo bem genérico só que meu problema está fora disto.

Eu vou tentar detalhar mais para ver se você entende como meu servidor funciona para ver se vc pode me ajudar:



O meu jogo é bem básico, Imagina o seguinte:

Eu comecei programando-o de tal forma que o cliente mandasse para o servidor suas posições e o servidor retornasse para os OUTROS CLIENTES. Qual o problema disto? São muitas informações por segundo, cada step vai ficar lotado de mensagens chegando e tudo o que é necessário são 2 players para que não tenha steps espaço o suficiente para que o programa rode da forma correta.(Nem em um servidor lan)

Então qual foi minha solução? Eu estudei um pouco e vi que poderia enviar e receber as informações para cada tecla pressionada e soltada. Logo em seguida criei uma array e fiz para que cada botão exercesse uma função dentro do player.

Imagina a seguinte array para "W" sendo igual a um e clica sendo 1 para clicado e 0 para soltado: if Clica[1] = 1 (y - = 1);//lembrando que a mensagem do valor do botão pressionado/ou solto são enviadas pelo client.

Qual o problema deste tipo de mensagem? A internet é muito inconstante, o tempo de clicar e soltar não vai ser o mesmo isso vai fazer com o que o player vá mais adiante ou vá mais para trás.
(eu já tentei misturar botões + posições mas ainda assim não dá certo, pois o player acaba saindo muito da distância prevista e acaba saindo um pouco feio).

O meu plano é estudar um pouquinho mais para ver o que fiz de errado e para ver como fazer para que o tempo de clicar e de soltar seja igual ao das mensagens de clicar e soltar.

VEJAM QUE MEU PROBLEMA NÃO É O LAG, E SIM A FALTA DE CONSTÂNCIA ENTRE OS DOIS TEMPOS. Por mais que exista delay eu quero fazer com que estes dois tempos sejam iguais.

É por isto que o que eu quero é apenas SINCRONIA entre o tempo de clicar e soltar E o tempo das mensagens de clicar e soltar.

Caso precisem que eu explique mais uma vez não terei problema, na próxima serei o mais direto e simples possível sobre o que quero.


Última edição por Thomaz em Sab 04 Fev 2012, 17:20, editado 1 vez(es)

Thomaz

Ranking : Nota A
Número de Mensagens : 106
Idade : 21
Data de inscrição : 13/10/2011
Notas recebidas : A
Reputação : 4
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://bigleafeater.tumblr.com/

Voltar ao Topo Ir em baixo

Re: Como funcionam servidores?

Mensagem por vinians em Qua 01 Fev 2012, 13:09

Entendi o seu problema. Bem, na minha opinião, sua abordagem não vai funcionar mesmo pois envolve temporização e realmente você acabaria tendo que enviar algum byte de controle ou criar um sistema de bufferização de mensagens, mas que acabaria por congestionar a rede.
Eu ainda acho que você deve enviar a posição final Absoluta. Entretanto você não precisa enviar o caracteres ASCII. Veja um exemplo:
O player esta na poiscao: 100, 120
Neste caso enviando em ASCII você enviaria 6 bytes certo? Ok, mas se enviar um byte binário você gasta somente 2 bytes e pode enviar valores até -32768 até 32767, gastando assim 4 bytes para os 6 valores. Isso reduz bastante a quantidade final de bytes enviados.
Ou seja, se concentre em valores absolutos e não em temporização pois realmente não daria certo.
Qualquer coisa estamos ai e vamos conversando até que possamos char uma solução melhor.
Flws

vinians

Ranking : Nota B
Número de Mensagens : 2490
Idade : 27
Data de inscrição : 18/09/2008
Notas recebidas : B-C-A-C
Reputação : 52
Insignia 1 x 0 Insignia 2 x 1 Insignia 3 x 0
Prêmios
   : 0
   : 2
   : 1

http://xcreatorgames.weebly.com/

Voltar ao Topo Ir em baixo

Re: Como funcionam servidores?

Mensagem por Thomaz em Qua 01 Fev 2012, 14:57

Você diz que eu tenho que largar este sistema de ascii e tentar me concentrar em conseguir fazer funcionar um sistema por "posições"?.

Tipo, quando eu envio estes botões dos dois lados (tanto no servidor quanto no client) terão players que interpretarão as mensagens de botões clicados.(Lembrando que eu só mando esta mensagem uma vez).

Deixando de explicar o que eu estou fazendo e passando mais para o que você falou:
Desculpa fazer uma pergunta destas mas um byte binário é enviado de qual forma?(Writebyte?)

E outra coisa, Eu jogo bastante gang garrison e uma coisa que eu acho incríve é que, apesar do lag, o jogo dificilmente para para sincronzar(Em sincronia entenda por mandar posições para que os players se teletransportem para um ponto referêncial do server). A coisa aparenta ser tão boa que parece ser um "Stream" de um vídeo que você está jogando.(digo stream pq claro tem seu lag mas é tudo perfeitamente sincronizado.)

E daí que vem a minha dúvida: Já que a internet é tão inconstante, tem como eu criar um delay constante? Ou você me aconselha desistir destas coisas de botões?

Thomaz

Ranking : Nota A
Número de Mensagens : 106
Idade : 21
Data de inscrição : 13/10/2011
Notas recebidas : A
Reputação : 4
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://bigleafeater.tumblr.com/

Voltar ao Topo Ir em baixo

Re: Como funcionam servidores?

Mensagem por Thomaz em Sab 04 Fev 2012, 09:13

Ahh, desculpa só para lembrar que eu utilizo a 39dll.

E só para adicionar uma coisa, a mensagem que eu envio fica desta forma:

clearbuffer();//não preciso explicar, acredito '-'
writebyte(msg_botoes);//indica qual tipo de mensagem que estou mandando;
writeushort(1);//ou qualquer valor entre 1 e 7.*(w = 1, a = 2, s = 3, d = 4)
writeushort(1);//este segundo valor é como um true ou false que indica se foi clicado ou não, ou seja, 0 = não clicado e 1 = clicado.
sendmessage(host);

Esta mensagem eu envio para cada botão clicado. Algum erro você consegue encontrar? Está muito grande a mensagem?

EDIT: lembrando que o servidor lê, executa e envia de volta para o client para, só depois disso, poder executar (até mesmo o próprio player que enviou a mensagem).

Editado por joton
Não post outro recado abaixo do seu anterior, isso é considerado post duplo, sugiro que leias as regras, +5 na barra de alerta

Thomaz

Ranking : Nota A
Número de Mensagens : 106
Idade : 21
Data de inscrição : 13/10/2011
Notas recebidas : A
Reputação : 4
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://bigleafeater.tumblr.com/

Voltar ao Topo Ir em baixo

Re: Como funcionam servidores?

Mensagem por vinians em Sab 04 Fev 2012, 11:23

Amigo, pq vc esta usando o writeshort() para enviar valores entre 1 e 7 ? Isso duplica a quantidade de bytes enviados. Use o writebyte() que envia apenas 1 byte de cada vez. Estou falando isso pq vc tinha dito que estava ficando lento, então este pode ser o problema. Sempre use o minimo de bytes possiveis para enviar suas mensagens.
Flws

vinians

Ranking : Nota B
Número de Mensagens : 2490
Idade : 27
Data de inscrição : 18/09/2008
Notas recebidas : B-C-A-C
Reputação : 52
Insignia 1 x 0 Insignia 2 x 1 Insignia 3 x 0
Prêmios
   : 0
   : 2
   : 1

http://xcreatorgames.weebly.com/

Voltar ao Topo Ir em baixo

Re: Como funcionam servidores?

Mensagem por Kaique_Staff em Sab 04 Fev 2012, 13:14

Com hamachi vc pode criar um servidor que é feito usando seu IP.

Kaique_Staff

Ranking : Nota E
Número de Mensagens : 206
Data de inscrição : 16/01/2012
Notas recebidas : E+E
Reputação : 3
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://forumshow.blogspot.com

Voltar ao Topo Ir em baixo

Re: Como funcionam servidores?

Mensagem por Kabeção em Sab 04 Fev 2012, 16:30

Se quer um conselho, não envie informação do cliente para o servidor de forma direta. Isso não é seguro.
Jogos online para evitar cheats enviam solicitações (ou chamadas) ao invés de valores.

Por exemplo, o jogador matou um inimigo e a experiência dele tem que subir, não envie o valor total dos pontos de xp para o servidor diretamente, envie uma solicitação para aumenta-los dentro do próprio servidor. Pseudo-código:
Código:
//No cliente:
enviar_jogador_atacou();

//No Servidor
if (jogador_atacou) {
    xp += monstro_xp(monstro_selecionado.id);
}
O mesmo para posições
Código:
// No cliente
acres_pos_x();

// No Servidor
if (solicitou_acres_pos_x) {
    x += velocidade;
}

Valores de velocidade de movimento, o número de ponto que matar um inimigo da, todas essas coisa devem ser definidas no servidor e não no cliente.
O cliente deve ser apenas um meio de mostrar as informações baixadas do servidor para o jogador e enviar solicitações mas nunca para guardar ou enviar valores diretamente (obviamente, apenas valores que você pode evitar enviar, pois, coisas como login e senha são inevitáveis).

Alguns jogos chegam até a enviar apenas o que o jogador clica ou pressiona no teclado sendo que tudo o processamento é no servidor.

Hoje em dia é praticamente impossível fazer hackers que mudam valores em jogos online porque não há envio, só solicitação. Mesmo que mudem o valor no cliente, nada vai acontecer pois o cliente não envia valores, só os mostra.


Última edição por Kabeção em Sab 04 Fev 2012, 16:49, editado 4 vez(es)

Kabeção

Ranking : Sem avaliações
Número de Mensagens : 2314
Data de inscrição : 08/06/2008
Reputação : 100
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 3
   : 0
   : 1

http://blackcapapps.blogspot.com.br/

Voltar ao Topo Ir em baixo

Re: Como funcionam servidores?

Mensagem por vinians em Sab 04 Fev 2012, 16:41

Kabeção escreveu:Valores de velocidade de movimento, o número de ponto que matar um inimigo da, todas essas coisa devem ser definidas no servidor e não no cliente.
O cliente deve ser apenas um meio de mostrar as informações baixadas do servidor para o jogador e enviar solicitações mas nunca para guardar ou enviar valores diretamente (obviamente, apenas valores que você pode evitar enviar, pois, coisas como login e senha são inevitáveis).
Otima observação Kabeção. Eu ainda não fiz um jogo on line com multiplos clientes, mas tenho alguma idéia de como faze-lo. Isso significa que não se deve checar colizões nos clientes e sim no servidor certo? E depois mandar para cliente uma ordem de deleção de instancia por exemplo ? Ou seja, todo processamento pesado fica com o servidor?

vinians

Ranking : Nota B
Número de Mensagens : 2490
Idade : 27
Data de inscrição : 18/09/2008
Notas recebidas : B-C-A-C
Reputação : 52
Insignia 1 x 0 Insignia 2 x 1 Insignia 3 x 0
Prêmios
   : 0
   : 2
   : 1

http://xcreatorgames.weebly.com/

Voltar ao Topo Ir em baixo

Re: Como funcionam servidores?

Mensagem por Thomaz em Sab 04 Fev 2012, 16:44

Kabeção: Eu faço assim mesmo. Eu peço permissão do servidor para poder me movimentar.(Tanto que existe um delay entre o tempo que você clica e o tempo em que você se movimenta) aquilo foi apenas um exemplo mesmo. Mesmo assim, foi de muito valioso a sua dica. Existe muita coisa no meu jogo que esta sendo definido no próprio cliente! Obrigado.

Kaique_Staff: Meu problema não é fazer um servidor é mais para aprender como mandar mensagens.(a forma correta).


Vinians: Desculpa cara, digitei o código errado.(costume de digitar x e y para enviar as posições).

Joton: Que mágico isso, você tem o poder de editar o post dos outros! Laughing.
Peço perdão, admito que não li as regras mas lerei agora!



Thomaz

Ranking : Nota A
Número de Mensagens : 106
Idade : 21
Data de inscrição : 13/10/2011
Notas recebidas : A
Reputação : 4
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://bigleafeater.tumblr.com/

Voltar ao Topo Ir em baixo

Re: Como funcionam servidores?

Mensagem por Kabeção em Sab 04 Fev 2012, 17:27

vinians escreveu:
Kabeção escreveu:Valores de velocidade de movimento, o número de ponto que matar um inimigo da, todas essas coisa devem ser definidas no servidor e não no cliente.
O cliente deve ser apenas um meio de mostrar as informações baixadas do servidor para o jogador e enviar solicitações mas nunca para guardar ou enviar valores diretamente (obviamente, apenas valores que você pode evitar enviar, pois, coisas como login e senha são inevitáveis).
Otima observação Kabeção. Eu ainda não fiz um jogo on line com multiplos clientes, mas tenho alguma idéia de como faze-lo. Isso significa que não se deve checar colizões nos clientes e sim no servidor certo? E depois mandar para cliente uma ordem de deleção de instancia por exemplo ? Ou seja, todo processamento pesado fica com o servidor?
Quanto a colisão veja só, o cliente deve processar as colisões também pois o jogo esta sendo mostrado e executado para ele e o jogador vai atravessar paredes se houver lentidão de conexão, ou vai ser estranho eu mando o jogador se mover e não acontecer nada porque o servidor ainda não atualizou meu estado. Fazer o servidor processar colisões multiplicara o trabalho, mas a segurança é mais importante.

Ainda sim existem muitas técnicas, como comparar os vertices próximos ao jogador(no caso de mapas 3D) com uma cópia do mapa no servidor, caso sejam diferente o servidor desconecta o cliente (é a mais comum para evitar dobrar o trabalho).
Ou atém mesmo o jogo ser feito de modo que modificações no mapa não atrapalhem ou beneficie o jogador, como por exemplo as texturas, mudar a textura de um jogo não aumentara o poder ou dará vantagens, então porque preciso checar modificações? Eu posso simplesmente da a volta pela casa, atravessar a parede é mais rápido mas ajuda em algo? É o servidor que defini a posição dos monstros no mapa, então modifica-lo não fará diferença.

Edit:
Ah, você também pode analisar anomalias. Se o jogador se mexer rápido demais de um ponto para o outro se sua velocidade estava normal então algo esta errado, desconecte-o.


Última edição por Kabeção em Sab 04 Fev 2012, 17:58, editado 3 vez(es)

Kabeção

Ranking : Sem avaliações
Número de Mensagens : 2314
Data de inscrição : 08/06/2008
Reputação : 100
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 3
   : 0
   : 1

http://blackcapapps.blogspot.com.br/

Voltar ao Topo Ir em baixo

Re: Como funcionam servidores?

Mensagem por Thomaz em Sab 04 Fev 2012, 17:33

Isso de desconectar o servidor(Desculpa estar me intrometendo '-') isso acontece MUITO no Mario Kart 7.

Sabe quando você está muito longe dos outros competidores e fica esperando eles só para dar a ré de última hora e passar em primeiro? (Sim, eu faço isso Twisted Evil )

Se você fizer isto, eu imagino que o servidor "preveja" que você tenha passado na linha de chegada, só que você não chegou ainda e, para não existir choque de "Ideias", o jogador é desconectado. Isto acontece todas as vezes em que eu jogo.


Só voltando um pouco para o tópico, existe algum material bom que vocês conheçam(Pode ser em inglês mesmo) que possa me ajudar a abrir minha mente no que diz respeito às mensagens?


Última edição por Thomaz em Sab 04 Fev 2012, 17:46, editado 1 vez(es)

Thomaz

Ranking : Nota A
Número de Mensagens : 106
Idade : 21
Data de inscrição : 13/10/2011
Notas recebidas : A
Reputação : 4
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://bigleafeater.tumblr.com/

Voltar ao Topo Ir em baixo

Re: Como funcionam servidores?

Mensagem por Kabeção em Sab 04 Fev 2012, 17:39

Olha, nesse caso é mais provável que seja delay de conexão. Se você demora a responder ou fica sem enviar solicitação de "ainda estou jogando" o servidor te desconecta. Mas mesmo você estando parado no jogo, ele continua baixando informação do servidor e retornando para ele que a informação foi recebida.
Ou é um bug ou é problema de conexão tanto seu quando dos outros jogadores pois não faz muito sentido se for outra coisa. não

Kabeção

Ranking : Sem avaliações
Número de Mensagens : 2314
Data de inscrição : 08/06/2008
Reputação : 100
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 3
   : 0
   : 1

http://blackcapapps.blogspot.com.br/

Voltar ao Topo Ir em baixo

Re: Como funcionam servidores?

Mensagem por vinians em Sab 04 Fev 2012, 18:51

Entendi, mas ainda acho que o servidor deve processa as colisões, mas não usando o sistema normal do GM e sim usando algoritmos de colisão como, por distância ou sobreposição de retangulos. Porque? Simples, porque isso permite que eu faça um servidor em Delphi por exemplo executando código nativo e muito rápido. Isso não daria certo? Alias vou tentar fazer isso pra testar e quando tiver algo eu posto no fórum pra vocês verem .
@Topico
Vou pesquisar aqui se achar alguma coisa eu te passo!
Flws!

vinians

Ranking : Nota B
Número de Mensagens : 2490
Idade : 27
Data de inscrição : 18/09/2008
Notas recebidas : B-C-A-C
Reputação : 52
Insignia 1 x 0 Insignia 2 x 1 Insignia 3 x 0
Prêmios
   : 0
   : 2
   : 1

http://xcreatorgames.weebly.com/

Voltar ao Topo Ir em baixo

Re: Como funcionam servidores?

Mensagem por Kabeção em Sab 04 Fev 2012, 19:03

Sim, mas o cliente deve processar colisão por si mesmo o servidor a atualize, imagine o quanto uma resposta atrasado dos controle é irritante para o jogador. Você aperta o botão e nada acontece principalmente em coisas como se mover ou atacar.
O jogo deve funcionar normalmente nesse sentido.

Pode observar que muitas vezes em jogos online sua posição pode estar diferente da que aparece em outro computador pois o cliente processa por se próprio mas isso não quer dizer que o servidor não processa também, isso para evitar o desconforto do jogo responder com atraso aos controles. No entanto caso haja muita diferença entre as posições, o servidor força a atualização da posição com ele.

Kabeção

Ranking : Sem avaliações
Número de Mensagens : 2314
Data de inscrição : 08/06/2008
Reputação : 100
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 3
   : 0
   : 1

http://blackcapapps.blogspot.com.br/

Voltar ao Topo Ir em baixo

Re: Como funcionam servidores?

Mensagem por Thomaz em Sab 04 Fev 2012, 19:32

Obrigado, apesar de não ter participado da discussão, foi muito bom aprender sobre o servidor.

Fico na espera Vinians. Enquanto isto eu pesquiso aqui também.


Update: http://www.howtomakeanmmorpg.com/data-management.html (Meio dããããã, mas tem coisas interessantes sobre mandar mensagens). Keep searching. . .

Update2: Achei a source do gang garrison 2, irei começar a estudá-la e direi para vocês se consegui algo.

Thomaz

Ranking : Nota A
Número de Mensagens : 106
Idade : 21
Data de inscrição : 13/10/2011
Notas recebidas : A
Reputação : 4
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://bigleafeater.tumblr.com/

Voltar ao Topo Ir em baixo

Re: Como funcionam servidores?

Mensagem por Conteúdo patrocinado Hoje à(s) 09:54


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum