Networking em jogo cooperativo.
2 participantes
Página 1 de 1
Networking em jogo cooperativo.
Estou começando a estudar TCP e UDP, vantagens e desvantagens de cada um, e me veio uma dúvida sobre a questão do desempenho.
Minha ideia é: Montar um servidor pequeno de início, apenas para que os clientes enviem seu IP e porta. Este servidor terá a única responsabilidade de passar os dados iniciais da conexão para que os clientes possam se conectar diretamente por Hole punching.
Pensei em utilizar os dois tipos, pois coisas que precisam de baixa latência como movimentação seriam enviados por UDP, e coisas que precisam de mais segurança no envio, como passar uma caixa de munição de um player para o outro, seria feito via TCP.
A dúvida é: Isso é viável ou correto? existem alguma forma melhor de fazer esse sistema pra co-op? (o que não necessita de taaanta segurança), até pela proposta do jogo
Já tenho meu server rodando e a parte de UDP está OK.
Minha ideia é: Montar um servidor pequeno de início, apenas para que os clientes enviem seu IP e porta. Este servidor terá a única responsabilidade de passar os dados iniciais da conexão para que os clientes possam se conectar diretamente por Hole punching.
Pensei em utilizar os dois tipos, pois coisas que precisam de baixa latência como movimentação seriam enviados por UDP, e coisas que precisam de mais segurança no envio, como passar uma caixa de munição de um player para o outro, seria feito via TCP.
A dúvida é: Isso é viável ou correto? existem alguma forma melhor de fazer esse sistema pra co-op? (o que não necessita de taaanta segurança), até pela proposta do jogo
Já tenho meu server rodando e a parte de UDP está OK.
SteveRogers- Instrutor
- PONTOS : 2673
REPUTAÇÃO : 156
Respeito as regras :
Re: Networking em jogo cooperativo.
Bom dia.
Não sei se você está usando UDP puro via sockets ou algum framework, mas eu usaria UDP pra jogabilidade e pra itens de inventário e etc eu usaria um banco de dados local do lado do servidor. O servidor faz a consulta no banco e apenas repassa a informação para o cliente. Dependendo do volume de usuários, usaria um banco um pouco mais robusto como postgresql, oracle, etc.
Existem algumas boas maneiras de enviar mensagens confiáveis e ordenadas via UDP (Se teu framework já não fizer isso pra você).
Se seu servidor fosse 100% autoritário, na realidade você nem precisaria se preocupar com isso uma vez que tudo é processado nele e ele só retransmite as informações.
Não que não seja correto usar TCP, mas se tornou obsoleto e não tão confiável para os modelos de jogos atuais, principalmente por conta do C10k.
Não sei se você está usando UDP puro via sockets ou algum framework, mas eu usaria UDP pra jogabilidade e pra itens de inventário e etc eu usaria um banco de dados local do lado do servidor. O servidor faz a consulta no banco e apenas repassa a informação para o cliente. Dependendo do volume de usuários, usaria um banco um pouco mais robusto como postgresql, oracle, etc.
Existem algumas boas maneiras de enviar mensagens confiáveis e ordenadas via UDP (Se teu framework já não fizer isso pra você).
Se seu servidor fosse 100% autoritário, na realidade você nem precisaria se preocupar com isso uma vez que tudo é processado nele e ele só retransmite as informações.
Não que não seja correto usar TCP, mas se tornou obsoleto e não tão confiável para os modelos de jogos atuais, principalmente por conta do C10k.
Re: Networking em jogo cooperativo.
Bom dia! No momento estou usando UDP puro, como é um projeto simples, porém voltado à aprendizagem, achei melhor não utilizar frameworks pra entender de verdade como a coisa funciona.
No momento a ideia do jogo é que dois players se conectem, e entrem numa partida em que nada é levado ou guardado.
No inicio da partida, você pode selecionar qualquer arma e levar qualquer tipo de munição, item de cura, etc. A unica limitação é dada pelo peso do equipamento escolhido, leve apenas o que puder carregar.
Logo, não há muito o que se processar ou armazenar no servidor.
Mas gostei da ideia de implementar um banco de dados no server, vou tentar incluir um sistema de estatísticas pessoais que dê pra melhorar com o tempo, como força, agilidade, etc. Só pra ter uma desculpa pra usar banco de dados :D
Obrigado Artplayer!
No momento a ideia do jogo é que dois players se conectem, e entrem numa partida em que nada é levado ou guardado.
No inicio da partida, você pode selecionar qualquer arma e levar qualquer tipo de munição, item de cura, etc. A unica limitação é dada pelo peso do equipamento escolhido, leve apenas o que puder carregar.
Logo, não há muito o que se processar ou armazenar no servidor.
Mas gostei da ideia de implementar um banco de dados no server, vou tentar incluir um sistema de estatísticas pessoais que dê pra melhorar com o tempo, como força, agilidade, etc. Só pra ter uma desculpa pra usar banco de dados :D
Obrigado Artplayer!
SteveRogers- Instrutor
- PONTOS : 2673
REPUTAÇÃO : 156
Respeito as regras :
Re: Networking em jogo cooperativo.
"Existem algumas boas maneiras de enviar mensagens confiáveis e ordenadas via UDP (Se teu framework já não fizer isso pra você)."
Poderia citar alguma dessas formas, basta o nome, para que eu tenha uma guia por onde começar a estudar;
Poderia citar alguma dessas formas, basta o nome, para que eu tenha uma guia por onde começar a estudar;
SteveRogers- Instrutor
- PONTOS : 2673
REPUTAÇÃO : 156
Respeito as regras :
Re: Networking em jogo cooperativo.
SteveRogers escreveu:Bom dia! No momento estou usando UDP puro, como é um projeto simples, porém voltado à aprendizagem, achei melhor não utilizar frameworks pra entender de verdade como a coisa funciona.
No momento a ideia do jogo é que dois players se conectem, e entrem numa partida em que nada é levado ou guardado.
No inicio da partida, você pode selecionar qualquer arma e levar qualquer tipo de munição, item de cura, etc. A unica limitação é dada pelo peso do equipamento escolhido, leve apenas o que puder carregar.
Logo, não há muito o que se processar ou armazenar no servidor.
Mas gostei da ideia de implementar um banco de dados no server, vou tentar incluir um sistema de estatísticas pessoais que dê pra melhorar com o tempo, como força, agilidade, etc. Só pra ter uma desculpa pra usar banco de dados :D
Obrigado Artplayer!
A ideia é bem legal, eu curti!
Há um tempo atrás eu comecei a desenvolver meu próprio framework ( Apenas pra entender melhor como as coisas funcionam na íntegra ). Ficou bom, mas não tão bom quanto um Enet/LiteNet da vida. Mas em contrapartida, eu trabalho com muito mais segurança e consigo solucionar muitos problemas muito mais rápido.
Minha opinião é que é sempre válido (se não obrigatório) se aprofundar e entender bem oque está fazendo. Mas sem a pretensão de reinventar a roda.
Sucesso! Já fiquei com vontade de jogar o seu jogo.
Re: Networking em jogo cooperativo.
Acabamos postando juntos na mensagem anterior.SteveRogers escreveu:"Existem algumas boas maneiras de enviar mensagens confiáveis e ordenadas via UDP (Se teu framework já não fizer isso pra você)."
Poderia citar alguma dessas formas, basta o nome, para que eu tenha uma guia por onde começar a estudar;
Não existe uma maneira 100% certa, mas você pode criar uma queue e usar mensagens de confirmação de/para. Pode usar algum checksum pra isso em cada mensagem. Fazendo com que o próximo item da queue somente fosse processado quando o anterior fosse confirmado.
Re: Networking em jogo cooperativo.
artplayermos postando juntos na mensagem anterior. escreveu:
Não existe uma maneira 100% certa, mas você pode criar uma queue e usar mensagens de confirmação de/para. Pode usar algum checksum pra isso em cada mensagem. Fazendo com que o próximo item da queue somente fosse processado quando o anterior fosse confirmado.
Entendi, irei tentar implementar isto sempre que uma operação demandar mais segurança no recebimento. Na parte do checksum seria algo como comparar hash para verificar se a mensagem chegou corretamente?
Algo como:
*Porta usada pra dados mais seguros*
cliente1: envia (hash/data) aguarda resposta;
cliente2: recebe(compara h/d) envia resposta;
cliente1: recebe resposta/ conclui operação ou envia novamente;
cliente2: recebe confirmação, ou recebe compara novamente;
Nesse caso tendo algumas redundâncias pra garantir que a mensagem foi recebida corretamente, além de já tratar mensagens conforme o padrão que ela chega.
O jogo em si é coisa boba, nem sei se vou lançar, ele é só minha inspiração pra estudar networking voltado à jogos. Mas obrigado! kkk
SteveRogers- Instrutor
- PONTOS : 2673
REPUTAÇÃO : 156
Respeito as regras :
Re: Networking em jogo cooperativo.
Exatamente!SteveRogers escreveu:artplayermos postando juntos na mensagem anterior. escreveu:
Não existe uma maneira 100% certa, mas você pode criar uma queue e usar mensagens de confirmação de/para. Pode usar algum checksum pra isso em cada mensagem. Fazendo com que o próximo item da queue somente fosse processado quando o anterior fosse confirmado.
Entendi, irei tentar implementar isto sempre que uma operação demandar mais segurança no recebimento. Na parte do checksum seria algo como comparar hash para verificar se a mensagem chegou corretamente?
Algo como:
*Porta usada pra dados mais seguros*
cliente1: envia (hash/data) aguarda resposta;
cliente2: recebe(compara h/d) envia resposta;
cliente1: recebe resposta/ conclui operação ou envia novamente;
cliente2: recebe confirmação, ou recebe compara novamente;
Nesse caso tendo algumas redundâncias pra garantir que a mensagem foi recebida corretamente, além de já tratar mensagens conforme o padrão que ela chega.
O jogo em si é coisa boba, nem sei se vou lançar, ele é só minha inspiração pra estudar networking voltado à jogos. Mas obrigado! kkk
Torna o processo um pouco mais lento, mas a velocidade do UDP em relação ao TCP já compensa.
Re: Networking em jogo cooperativo.
Bom, isso já vai me poupar ter que dividir a transmissão em TPC e UDP, o que já é um baita avanço, apesar de ficar um pouco mais lento, será apenas em dados não sensíveis a velocidade, meu jogador pode esperar 200ms por uma confirmação, se for o caso, mas perder a informação enviada, jamais kkk
Obrigado por tudo!
Obrigado por tudo!
SteveRogers- Instrutor
- PONTOS : 2673
REPUTAÇÃO : 156
Respeito as regras :
Tópicos semelhantes
» error CS0619: 'HostData' is obsolete: 'The legacy networking system has bee
» using UnityEngine.networking
» Client Sincronizar objeto sem ser o player ??? (Networking Unet)
» Da pra colocar sisteminha em um jogo da unity pra trolar quem for piratear o jogo?
» Como patentear um jogo? ou seja, o jogo ter um copyright meu?
» using UnityEngine.networking
» Client Sincronizar objeto sem ser o player ??? (Networking Unet)
» Da pra colocar sisteminha em um jogo da unity pra trolar quem for piratear o jogo?
» Como patentear um jogo? ou seja, o jogo ter um copyright meu?
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos