Chat do Viny + protocolo de comunicacao + vários Sockets

13 respostas
SirDominque

Bom dia gente.
Depois que o Viny me ajudou a fazer aquele chat funcionar, que agora esta funfando bem pakas ^^ , tenho algumas Dúvidas.
Vou tentar dividir bem elas, ja vou agradeçendo a ajuda!!! E logo logo, como agradecimento, libero o programa e todo o código , ok ? :smiley:

Enfim,

Descobri que é possível o cliente ter mais de um socket ligado ao servidor.Em que isso é ùtil?
Por exemplo, se eu quiser colocar uma imagem pra cada usuário, eu deveria ter um socket separado pra nao sobrecarregar o socket de comunicação ou nao tem nada a ver,
porque eu posso usar synchronized e além disso, ninguem tem conexão discada ?

Mais uma pergunta,
Quando que se usa mais de um socket ?

Muito obrigado gente, o chat esta ficando bacana kkk :smiley:

13 Respostas

SirDominque

Ahh, gente , mais uma dúvida.
No cliente tem um método pra fechar o chat.

Eu fiz assim, esta correto ?

public void closeClientChat() {
        try {
            socket.close();

        } catch (IOException ex) {
            logDebug.setErrorMessageToFile(ex.getStackTrace() + logDebug.getLineJump() + ex.getMessage());
            Logger.getLogger(MainController.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

o log Debug é uma classe que fiz pra guardar os bugs num txt :P

ViniGodoy

Você pode ter mais de um socket para permitir que mais de uma thread faça o download de coisas separadas ao mesmo tempo. Por exemplo, você poderia fazer o seu char baixar o avatar separadamente.

Ou então, usar mais de um socket para comunicar com mais de um servidor. Você poderia ter o chat para conversas e um servidor só de propagandas em outro endereço.

SirDominque

ViniGodoy:
Você pode ter mais de um socket para permitir que mais de uma thread faça o download de coisas separadas ao mesmo tempo. Por exemplo, você poderia fazer o seu char baixar o avatar separadamente.

Ou então, usar mais de um socket para comunicar com mais de um servidor. Você poderia ter o chat para conversas e um servidor só de propagandas em outro endereço.

Ah entendi, então assim. O socket, nao tem como sobrecarregar ele, né ?

ViniGodoy

O que você quer dizer com “sobrecarregar”?

SirDominque

Por exemplo,
Eu imagino que o socket seja um cano.
Esse cano tem certa capacidade…
Tipo, eu nao posso transferir 1000 L do lado A para o lado B. Mesmo que o lado A tenha capacidade de 2000 e o lado B também.

No caso a capacidade seria a velocidade de conexão.

Não sei se faz sentido pra voce.

E

Só se alguma coisa no meio estiver impondo artificialmente esse limite. Por exemplo, um proxy ou um roteador.

Hebert_Coelho

entanglement:
Só se alguma coisa no meio estiver impondo artificialmente esse limite. Por exemplo, um proxy ou um roteador.
Ou a banda da internet!
Eu acho! >_<’’

ViniGodoy

A velocidade de conexão é uma característica física, independente da quantidade de sockets na máquina, ou mesmo de qual aplicação abriu o socket.

O socket seria mais como uma torneira, ligada na mesma tubulação, e essa tubulação representa literalmente as conexões partindo desde o cabo de rede da sua máquina, passando pela sua operadora te telefonia até o destino com quem está comunicando.

A thread como a pessoa que vai ali usar a torneira (não dá para 2 pessoas usarem a mesma torneira ao mesmo tempo, ainda que ela esteja ligada a mesma tubulação).

As conexões ainda tem 2 fatores. A velocidade que o dado trafega (equivalente a pressão da água, na nossa analogia hidráulica), e a banda, que é a quantidade de dados capaz de trafegar ao mesmo tempo (largura do cano).

Para um jogador de um game, é mais importante ter velocidade de tráfego do que largura de banda, pois um game tipicamente transmite várias pequenas mensagens de status. Já num torrent, a largura de banda costuma a ser mais interessante.

A combinação dos dois dá o que chamam de throughput, ou seja, a velocidade final da linha (a rigor, no throughput ainda é descontado a taxa de erro, ou seja, é a quantidade de dados que transmitiram corretamente num terminado intervalo de tempo).

SirDominque

Gente Obrigado pelas respostas.
Viny, imprimi seu post.

Tenho mais três dúvidas,s e possível :smiley:

Primeiro :

O jeito que eu estou fechando a conexão do cliente esta correta?

Segundo:

//socket.setPerformancePreferences(0,1,2);

Qual deveria ser a prioridade no caso desse chat?

Terceiro :
Queria implementar Fontes , igual do MSN, no chat… Como poderia começar isso? Como eu devo Pensar?

ViniGodoy

Sim. Mas normalmente enviamos uma mensagem para o outro lado para avisar que estamos fechando. Caso contrário, pode levar muito tempo até que o outro lado perceba.

No caso de um chat, a preferência seria: 1,2,0. Mas isso não vai fazer lá muita diferença, pois ele não é crítico em nenhum desses pontos.

Você vai usar um JEditorPane. E aí é só trafegar um HTML ao invés de texto puro.

SirDominque

ViniGodoy:
Sim. Mas normalmente enviamos uma mensagem para o outro lado para avisar que estamos fechando. Caso contrário, pode levar muito tempo até que o outro lado perceba.

No caso de um chat, a preferência seria: 1,2,0. Mas isso não vai fazer lá muita diferença, pois ele não é crítico em nenhum desses pontos.

Você vai usar um JEditorPane. E aí é só trafegar um HTML ao invés de texto puro.

Entendi.
Vou implementar um método para fechar.
Vou colocar a preferencia em 1,2,0 para o servidor e o chat.

Mas sobre o HTML…
COMO ASSIM???
omg!!

ViniGodoy

O que vc quer dizer com fontes? Seria deixar o pessoal alterar a fonte do texto, certo? E usar formatação?

O JEditorPane renderiza HTML. Então, ao invés de mandar uma mensagem de texto plana, vc poderia mandar algo como
Olá <b>Enfermeira!</b>

E aí o Enfermeira vai sair em negrito.

SirDominque

ViniGodoy:
O que vc quer dizer com fontes? Seria deixar o pessoal alterar a fonte do texto, certo? E usar formatação?

O JEditorPane renderiza HTML. Então, ao invés de mandar uma mensagem de texto plana, vc poderia mandar algo como
Olá <b>Enfermeira!</b>

E aí o Enfermeira vai sair em negrito.

Valeu viny!
Po que fácil! Achei que eu teria que mandar um arquivo HTML lol

Tudo bem. Vou terminar de arrumar essa versão do chat e fazer uma cópia dela pra fazer isso aí :stuck_out_tongue:

Criado 15 de janeiro de 2013
Ultima resposta 16 de jan. de 2013
Respostas 13
Participantes 4