Boas opiniões, parabens a todas.
Gostaria de dar a minha opinião.
Bom, posso esta sendo ingênuo, porém não acredito que voce tenha que pensar em escalabilidade exageradamente agora, nesse momento, até por que são muitos fatores que influenciam esse aspecto, decisões de arquitetura,design de aplicações em rede,hardware´s e software´s adjacentes, uma boa maneira de começar na minha opinião é escrever o aplicativo concorrente, começe atendendo múltiplos clientes, escreva o teste para isso se for o caso, essa ja vai ser uma tarefa bem trabalhosa, porem vejo que ja tem alguns frameworks que vão facilitar sua vida como o citados acima se for trabalhar com java.
Existe diversas abordagens cada uma com seu próprio custo, grau de complexidade e logicamente vantagens e desvantagens.
Em java ainda acho simples de se fazer, porém trabalhar com socket´s (multiplexado, assíncrono e não bloqueantes) e threads em C seria um ótimo desafio e tem boas literaturas a respeito, Unix Network Programming[Richard Stevens] e caso precise de comunicação entre processos do mesmo autor temos “Interprocess Comunication”.
Programação concorrente e de redes tem muito conteúdo e exige muita experiência e muito conhecimento não somente de algoritmos conhecidos, mas também do sistema adjacente(Hardware e Software).
Aconselho você desenhar sua solução no estilo arquitetural de aplicações em rede REST, pois você somente usará o HTTP que é bastante comum e largamente utilizado no mundo todo e tem suporte a conexões keep-alive e várias questões de escalabilidade também já conhecidas e divulgadas em palestras inclusive aqui no brasil usando esse esquema você já pouparia tempo de não ter que pensar sobre escalabidade pois é bem subjetivo. 
Você ganharia a interoperabilidade com vários outros sistemas, sejam móveis ou corporativos.
Acredito friamente, pois não sou especialista no assunto, que não seja tão complexo manter uma lista de conexões ativas e que você possa desenhar uma solução em java que atenda múltiplos clientes simultaneamente, no caso 1000 e criar um temporizador em java para iterar na sua lista de conexões ver o tempo de inatividade e responder a elas, claro seguindo a RFC 2616 para conexões persistentes. Você também terá que pensar em variáveis que possam quantificar e qualificar quando uma conexão esta inativa, criar esse conceito na sua aplicação.
Java possui um número grande de frameworks para trabalhar com programação concorrente e que atenda múltiplos clientes através da rede. voce pode dar uma olhada neles e começar a partir deles. "se conselho fosse bom não dava, vendia! " hehe.
Outro palpite, se tiver frameworks que te ajudem a desenhar a aplicação utilize, pois aplicações como esta estão sujeitas, por falta de experiência, voce criar muitos bugs de segurança o que pode a vir comprometer o seu sistema, por exemplo, disponibilidade.
Bom é isso, se eu puder ajudar pode me contactar.
bruno.taboada@gmail.com
Abraço.