Il server suppongo sia http giusto?
Se il server è http allora c'è un problema di base legato all'essenza del protocollo http: il server non può mandare di propria iniziativa un messaggio al client, ma può farlo solo in caso di richiesta da parte di quest'ultimo. Un server http ti obbliga, in generale, a fare un polling (interrogazione) continuo da parte del client al fine di chiedere se ci sono aggiornamenti e questo, come hai già indovinato, è inefficiente se gli aggiornamenti lato server sono poco frequenti. C'è il vantaggio però che il server non deve mantenere strutture dati o in generale info sui client e quindi può sopportare tantissime connessioni.
Se decidi di non usare http ma un tuo protocollo che viaggia su TCP allora apri un canale permanente tra ogni client e il server e quindi il server può inviare su questo canale le info solo quando deve. Il problema è che mantenere un canale costa risorse e il server non potrà reggere tantissime connessioni inoltre sarà debole verso attacchi Denial Of Service da parte di hackers.
Ricapitolando:
HTTP:
pro: sicuro da attacchi DoS, tante connessioni.
contro: il client deve fare polling.
TCP:
pro: il client non deve fare polling.
contro: il server affoga se arrivano tante connessioni, devi creare un tuo protocollo o comunque trovarne uno esistente che si adatti a quello che vuoi fare.
Una buona alternativa potrebbero essere i nuovi metodi presenti in HTML5, websockets e reverse http, fai un po' di ricerca su google e troverai diversi esempi di come si usano.