Pergunta

Eu estou criando um aplicativo onde muitos clientes se conectam a um servidor central. Este servidor mantém essas conexões, o envio de KEEP-Alives de cada meia-hora. O servidor tem um servidor HTTP embutido, que fornece uma interface para as conexões de cliente (ex http:. // server / IsClientConnected ? id = id ). Eu queria saber qual é a melhor maneira de fazer isto. Minha implementação atual é em Java, e eu só tenho um mapa com ID de como a chave, mas um fio é iniciado para cada ligação, e eu não sei se esta é realmente a melhor maneira de fazer isso. Os ponteiros seria apreciada.
Obrigado,
Isaac Waller

Foi útil?

Solução

Use o pacote java.nio, como descrito nesta página: construção servidores altamente escaláveis ??com Java NIO . Também ler esta página com muito cuidado: Arquitetura de um servidor altamente escalável NIO-base .

Pessoalmente eu não se preocupar com os internos NIO e usar uma estrutura como Apache MINA ou xSocket . NIO é complicado e fácil de errar de forma muito obscuros. Se você quer que ele "apenas trabalho", em seguida, usar um quadro.

Outras dicas

Com um único segmento por conexão normalmente você pode escalar até cerca de 10.000 conexões em uma única máquina. Para uma máquina Windows 32, você provavelmente vai bater um limite de cerca de 1.000 ligações.

Para evitar isso, você pode alterar o design do seu programa, ou você pode escalar para fora (horizontal). Você tem que pesar o custo de desenvolvimento com o custo de hardware.

O único segmento por usuário, com uma única conexão contínua é geralmente o modelo de programação mais fácil. Gostaria de ficar com este modelo até chegar aos limites do seu hardware atual. Nesse ponto, eu iria decidir que quer mudar o código, ou adicionar mais hardware.

Se os clientes serão conectados por longos períodos de tempo, a atribuição de uma thread por cliente pode ser problemático. Cada thread no servidor requer uma certa quantidade de recursos (memória para a pilha, por exemplo).

Você pode usar Jetty Continuations para lidar com a solicitação do cliente com menos threads usando servlets assíncrona.

Leia mais sobre o padrão do Reactor. Existe uma implementação para que, em Java (que utiliza canais em vez de fio para o cliente). É fácil de implementar e muito eficiente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top