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

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:

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

Eu fiz assim, esta correto ?

[code] 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);
    }
}[/code]

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

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.

[quote=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.[/quote]

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

O que você quer dizer com “sobrecarregar”?

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.

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

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

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).

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?

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.

[quote=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.[/quote]

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!!

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.

[quote=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.
[/quote]

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: