Jump to content
luis7

Dúvida - Sockets || RMI

Recommended Posts

luis7

Num jogo que tenho de fazer para uma cadeira, foi-me pedido que implementasse um modo multiplayer em rede. Gostava de saber a opinião de alguém mais experiente sobre o que consideram melhor de utilizar, se Socket's (Já vi o artigo que aparece numa revista P@P), ou RMI.

Desde já muito obrigado pelas vossas opiniões.

Cumprimentos

Share this post


Link to post
Share on other sites
Knitter

Sockets.

RMI não é uma tecnologia que se adeque ao que pretendes. Implementa um protocolo simples, mesmo que em texto, e usa sockets para fazer comunicação, possivelmente sockets UDP dado que é um jogo e não há grande problema com a perda de pacotes.

RMI terás de passar por um conjunto de problemas que não compensa, além de não facilitar muito dado que não estou a ver um jogo a precisar de passar um objecto completo e serializado quando pode passar simplesmente as informações fundamentais. É curioso a ideia de passar um objecto do cliente para o servidor sem preocupação com a rede mas com RMI terás de lidar com problemas de segurança, implementar políticas de segurança nas máquinas clientes e obrigar o utilizador a configurar ou aceitar um conjunto de opções que têm alguma dificuldade.

Share this post


Link to post
Share on other sites
KTachyon
Implementa um protocolo simples, mesmo que em texto, e usa sockets para fazer comunicação, possivelmente sockets UDP dado que é um jogo e não há grande problema com a perda de pacotes.

Depende do jogo. Jogo multiplayer não significa que pode haver perda de packets.


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
luis7

É um jogo bastante simples, a batalha naval. Não necessito de estar com grandes cuidados!

Share this post


Link to post
Share on other sites
joseerodrigues

Como já respondido pelo Knitter, Sockets !

RMI seria uma escolha interessante sim, mas talvez seja já overkill para o este caso em concreto.

Share this post


Link to post
Share on other sites
KTachyon

É um jogo bastante simples, a batalha naval. Não necessito de estar com grandes cuidados!

Pois, mas a utilização de UDP não é uma questão de grandes ou pequenos cuidados. No caso da batalha naval deves mesmo utilizar TCP, a não ser que queiras implementar a tolerância a falhas à mão.


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
luis7

Desde já obrigado pelas opiniões.

Surgiu-me agora uma dúvida:

No jogo tenho que alternar turnos de jogadores, ora joga um e o outro recebe dados e vice-versa. Qual acham a melhor forma de o fazer?

Share this post


Link to post
Share on other sites
KTachyon

Em termos de quê? Protocolo?

Se as jogadas são individuais (apenas é passada uma mensagem pela rede), podes assumir que quando a mensagem chega ao destinatário, sabes que é a vez de ele jogar. Podes passar a resposta directamente com o "tiro", ou envias a resposta e esperas pelo ack antes de passares à jogada.

Claro que isto pode ser muito linear, caso pretendas implementar outras funcionalidades (como, múltiplos tiros por turno com resposta imediata), podes necessitar de implementar outra forma de sincronismo entre os dois peers.

Mas um protocolo para batalha naval é capaz de ser das coisas mais simples de implementar, e ao utilizares TCP/IP, podes eliminar a necessidade de implementar a tolerância a falhas.


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
joseerodrigues

Eu esperaria pela resposta de "OK-GO" antes de jogar, só para ter a certeza de que foi validada a msg pelo outro peer.

E do que percebo ambos os jogadores irão receber dados por cada jogada correcto? (player1 -> "B4" -> player2; player2 -> "got message: B4, HIT!" -> player1)

Qto á melhor forma de o fazer, há pelo menos uma por cada pessoa a quem perguntares :thumbsup:

Ah e concordo com o KTachyon, TCP/IP == muito menos trabalho!

Share this post


Link to post
Share on other sites
KTachyon

Eu aconselharia utilizar um protocolo constituído por mensagens que sejam fáceis de validar, tipo XML ou JSON.

{"target":"B4","result":"HIT"}


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
joseerodrigues

Eu aconselharia utilizar um protocolo constituído por mensagens que sejam fáceis de validar, tipo XML ou JSON.

{"target":"B4","result":"HIT"}

Precisamente!!

No caso do java para o marshall e unmarshall, JAXB ou GSon tratam do caso de XML ou JSON. Simples :thumbsup:

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.