Demora por TCP interrompe todas as conexões?

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

Demora por TCP interrompe todas as conexões?

Mensagem por felipejoys em Sab 04 Jan 2014, 11:08

Bom, eu sei que fazer jogos online por TCP tem um empecilho: o jogo tem grande perigo de dar lag por perda de pacotes enviados que deveriam ser confirmados, mas que como não houve tal confirmação, são enviados desdo início de novo.

Minha dúvida! Se isso acontecer do servidor para um jogador, os outros jogadores são imediatamente afetados ou aquilo atrapalha apenas aquele jogador?
Ou seja, dá só lag com o socket que tá com problema ou faz parar todas as conexões até obter resposta do jogador de conexão "problemática?"

felipejoys

Número de Mensagens : 56
Data de inscrição : 29/12/2013
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: Demora por TCP interrompe todas as conexões?

Mensagem por PedroX em Sab 04 Jan 2014, 13:12

Recomendo que leia esse artigo, que está em inglês, mas é ótimo:
http://gafferongames.com/networking-for-game-programmers/udp-vs-tcp/

O melhor a se fazer é usar UDP, porque a segurança do TCP é também uma desvantagem. Com uma boa programação, é possível evitar vários bugs do UDP.

Respondendo a sua pergunta: geralmente só afeta o jogador.

Faz de conta que você é o jogador com perda de pacotes. Você se movimenta e isso não é enviado ao servidor. Aí você para e isso não é enviado ao servidor também. O que vai acontecer é que você vai se movimentar atrasado no jogo dos outros.

O problema que pode afetar outros jogadores é que se houver vários pacotes perdidos de vários jogadores, o servidor precisará processar muitos de uma vez, o que pode diminuir a performance dele. Mas geralmente isso não acontece, porque a taxa de perda é de até 5%. Em jogos pequenos, isso não é muito importante.

PedroX

Ranking : Nota C
Número de Mensagens : 6034
Idade : 21
Data de inscrição : 26/07/2008
Notas recebidas : C+B
Reputação : 286
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Re: Demora por TCP interrompe todas as conexões?

Mensagem por felipejoys em Sab 04 Jan 2014, 14:08

Se o jogador se movimenta e esse pacote não chega ao servidor, tudo bem, só ele vai congelar a conexão e enviar novamente os dados. Mas se o servidor que não consegue enviar os dados, ele vai esperar uma resposta e só enviar o próximo dado na lista quando o anterior tiver sucesso no envio. Se é o servidor que não obteve resposta, não seria adequado que ele congelasse todas as conexões, já que ele só usa um socket para todos e não tem como o protocolo TCP diferenciar num nível alto assim?

felipejoys

Número de Mensagens : 56
Data de inscrição : 29/12/2013
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: Demora por TCP interrompe todas as conexões?

Mensagem por PedroX em Sab 04 Jan 2014, 14:22

O que vai acontecer é:

O servidor envia 10 pacotes para o player 1 e 15 para o player 2.

Ao player 1, chegam 9 pacotes e ao player 2 chegam 14.

No próximo step do servidor, ele envia mais 15 para o player e mais 20 para o player 2. Chegam 14 e 18 respectivamente.

Nesse meio tempo, paralelamente, o PC vê que alguns pacotes faltaram, e tenta reenviá-los. Aí chegam os pacotes com sucesso. Só que tem mais pacotes ainda para serem enviados e mais perdas nos próximos.

O que acontece é que o GM trabalha separado da interface de rede. Ao mesmo tempo que ele está enviando certos pacotes, a interface pode estar enviando antigos perdidos e atuais ao mesmo tempo, para corrigir as perdas.

Nesse caso, se boa parte dos membros não receberem pacotes, outros podem ser afetados. Isso porque haverá congestionamento. Se muitos pacotes forem perdidos, muitos terão que ser reenviados.

PedroX

Ranking : Nota C
Número de Mensagens : 6034
Idade : 21
Data de inscrição : 26/07/2008
Notas recebidas : C+B
Reputação : 286
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Re: Demora por TCP interrompe todas as conexões?

Mensagem por felipejoys em Sab 04 Jan 2014, 15:11

Não dá pra ser exatamente assim. TCP envia pacotes garantidos.

TCP: envio um pacote, que chega no jogador, o jogador manda de volta um pacote dizendo "eu recebi" e o servidor manda *de novo* um pacote que agora diz "entendi que você recebi"

Um aperto de mão triplo. O segundo e terceiro são automáticos, coisa de TCP.

O problema é se durante esse triplo aperto de mão um dos pacotes não chega. A conexão congela, enviando mais vezes até que finalmente o pacote volte dizendo que foi recebido na terceira vez.

Daí minha dúvida: Se falhar, congela todas as conexões, ou só entre jogador específico e servidor?

felipejoys

Número de Mensagens : 56
Data de inscrição : 29/12/2013
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: Demora por TCP interrompe todas as conexões?

Mensagem por PedroX em Sab 04 Jan 2014, 15:24

Só entre o jogador e o servidor.

PedroX

Ranking : Nota C
Número de Mensagens : 6034
Idade : 21
Data de inscrição : 26/07/2008
Notas recebidas : C+B
Reputação : 286
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Re: Demora por TCP interrompe todas as conexões?

Mensagem por felipejoys em Dom 05 Jan 2014, 00:52

Ok... por que diz isso? Qual a lógica de TCP que te faz acreditar nisso?

felipejoys

Número de Mensagens : 56
Data de inscrição : 29/12/2013
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: Demora por TCP interrompe todas as conexões?

Mensagem por PedroX em Dom 05 Jan 2014, 01:11

Mais um artigo recomendado: http://gafferongames.com/networking-for-game-programmers/reliability-and-flow-control/

Eu imagino pelo seguinte: quando os packets são perdidos, eles precisam ser reenviados. Isso seria um problema se o servidor não pudesse enviar vários pacotes ao mesmo tempo. Mas os servidores podem. Então o único afetado é o player, que terá seu movimento atrasado e receberá movimentos atrasados.

Se a taxa de perda fosse grande (o que não é verdade) e acontecesse para vários players (improvável), o problema afetaria não só eles, mas a maioria.

PedroX

Ranking : Nota C
Número de Mensagens : 6034
Idade : 21
Data de inscrição : 26/07/2008
Notas recebidas : C+B
Reputação : 286
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Re: Demora por TCP interrompe todas as conexões?

Mensagem por felipejoys em Dom 05 Jan 2014, 14:08

Os artigos que você está mandando estão se baseando em UDP. Eu estou mexendo com TCP. Já li essas páginas há alguns dias.

Aqui vai o que eu estou tentando expressar, direto da wikipedia (que não é uma fonte 500%, mas que quebra o galho aqui):

Wikipedia escreveu:Some network transport protocols such as TCP provide for reliable delivery of packets. In the event of packet loss, the receiver asks for retransmission or the sender automatically resends any segments that have not been acknowledged.[7] Although TCP can recover from packet loss, retransmitting missing packets causes the throughput of the connection to decrease. This drop in throughput is due to the sliding window protocols used for acknowledgment of received packets. In certain variants of TCP, if a transmitted packet is lost, it will be re-sent along with every packet that had been sent after it. This retransmission causes the overall throughput of the connection to drop.

EDIT: Fui dar uma relida na página que você me mandou, e ela explica exatamente isso:

Seu artigo escreveu:The problem with TCP is that it abstracts data delivery as a reliable ordered stream. Because of this, if a packet is lost, TCP has to stop and wait for that packet to be resent.

felipejoys

Número de Mensagens : 56
Data de inscrição : 29/12/2013
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: Demora por TCP interrompe todas as conexões?

Mensagem por Kol em Dom 05 Jan 2014, 14:57

é o seguinte amigo o tcp, vai interromper os outros player sim, mas só se tiver em um loop só:

Exemplo:

loop{
Enviando pacotes player 1;
Enviando pacotes player 2;
Enviando pacotes player 3;
}

Se for TCP, e o pacote do player 1 não for enviado, ele para o loop ali, sendo assim se demorar 10s para enviar os outros player irão ficar parados 10s, oque recomendo fazer é usar thread, para cada player e usar udc para comandos basicos, como por exemplo a posição do player, já que você a envia constantemente. Smile

Kol

Número de Mensagens : 56
Data de inscrição : 11/09/2013
Reputação : 8
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Demora por TCP interrompe todas as conexões?

Mensagem por felipejoys em Seg 06 Jan 2014, 07:23

Nas funções nativas do GM:S você sabe se funciona como um loop só? Nele é um evento especial apenas para networking... Não tenho certeza de como é feito lá

felipejoys

Número de Mensagens : 56
Data de inscrição : 29/12/2013
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: Demora por TCP interrompe todas as conexões?

Mensagem por PedroX em Seg 06 Jan 2014, 15:16

O evento existe porque o sistema é assíncrono.
Então fique tranquilo.

PedroX

Ranking : Nota C
Número de Mensagens : 6034
Idade : 21
Data de inscrição : 26/07/2008
Notas recebidas : C+B
Reputação : 286
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Re: Demora por TCP interrompe todas as conexões?

Mensagem por felipejoys em Seg 06 Jan 2014, 15:49

Eu sei que o TCP fica parado até se recuperar se perder um pacote. Quero saber se há como contornar isso e se o GM:S usa uma variante do TCP que não faz isso.

felipejoys

Número de Mensagens : 56
Data de inscrição : 29/12/2013
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: Demora por TCP interrompe todas as conexões?

Mensagem por Conteúdo patrocinado Hoje à(s) 08:13


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