PHP + JQuery + HTML + CSS, 1535 bytes
Esta é uma submissão que se inclina mais para o que o OP considerou como 'o objetivo real'. Ou seja, um servidor de bate-papo totalmente funcional, que pode ser hospedado em praticamente qualquer servidor Web em qualquer lugar.
A funcionalidade inclui:
- Notificações quando os usuários entram ou saem da sala de bate-papo.
- Notificações quando os usuários alteram seu alias.
- Pesquisa em tempo real para novas mensagens, sem gerar excesso de tráfego ou carga no servidor.
- Layout e usabilidade muito semelhantes aos clientes de bate-papo existentes, como o X-Chat.
Para ser uma sessão, insira um alias na caixa apropriada e pressione Tabou Enterpara enviar. Se o alias já estiver em uso, você será notificado. O envio de mensagens também é feito via Enter.

Para sua conveniência, um arquivo de todos os arquivos pode ser encontrado aqui: chat.zip (escolha Download no menu Arquivo). Para instalar, descompacte em um diretório da web em qualquer servidor executando o PHP 5.4 ou superior.
Ressalvas:
- O IE 8 ou inferior girará em um loop infinito durante a pesquisa, porque, por algum motivo desconhecido para a humanidade, todas as solicitações do Ajax são armazenadas em cache por padrão. Também impede que você envie a mesma mensagem duas vezes e atualize a lista de usuários corretamente. Isso pode ser corrigido adicionando
cache:falsea cada solicitação do Ajax.
- Em todas as versões do IE, as mensagens não serão enviadas pressionando Enter, porque o
changeevento não é acionado (pressionar Tab, no entanto, funciona). Isso poderia ser corrigido adicionando um onkeypressmanipulador, verificando se a chave era Enter e depois chamando $(v).blur().focus().
Em suma, o IE não é suportado.
Cliente
O posicionamento dos elementos pode ser um pouco mais robusto, mas deve ficar bem com um tamanho mínimo de janela de aproximadamente ~ 800x600.
chat.htm (190 bytes)
<script src=jquery.min.js></script>
<script src=c.js></script>
<link rel=stylesheet href=c.css>
<select id=u multiple></select><pre id=o></pre>
<input id=n onchange=u()><input id=v onchange=s()>
c.css (136 bytes)
i{color:#999}
#u{float:right;height:100%;width:200px;margin-left:10px}
#o{border:1px solid #999;height:93%;overflow-y:scroll}
#v{width:54%}
c.js (435 bytes)
var l
(function p(){
$.ajax({url:'p.php',data:{n:$('#n').val()},success:function(d){
$('#o').html(d).scrollTop(1e4);$('#u').load('n.php');
},complete:p,timeout:2e4})
})()
function s(){
$.get('s.php',{n:$(n).val(),v:$(v).val()})
$(v).val('')
}
function u(){
$.get('u.php',{l:i=l,n:l=$(n).val()}).fail(function(){
alert("This name is already in use!")
$(n).val(l=i)
})
}
$(window).on('unload',function(){$.ajax({url:'l.php',data:{l:l},async:false})})
Servidor
Peço desculpas pelo servidor estar dividido em tantos pequenos pedaços. A alternativa seria usar um protocolo de mensagem adequado (via JSON codificar / decodificar) ou ter um grande de if ... elseif ...acordo com o qual as variáveis de postagem estão presentes. Criando scripts separados, basta solicitar o que você precisa é muito mais curto e talvez mais simples que os dois.
o.php (119 bytes) O canetas como conexão com o 'banco de dados'
<?$m=array_slice(unserialize(file_get_contents(m)),-300);
$u=unserialize(file_get_contents(u));$t=time();extract($_GET);
c.php (57 bytes) C omite alterações no 'banco de dados'
<?foreach([u,m]as$c)file_put_contents($c,serialize($$c));
p.php (151 bytes) P olls para novas mensagens
<?for($t=time();@filemtime(m)<$t;usleep(1e3))clearstatcache();include('o.php');
foreach($m as$v)if($n&&$v[0]>=$u[$n])echo@date("[H:i]",$v[0])."$v[1]\n";
s.php (62 bytes) S finaliza uma mensagem para o servidor
<?include('o.php');$m[]=[$t,"<b>$n</b>: $v"];include('c.php');
u.php (222 bytes) L registo Ser ou mudança de alias
<?include('o.php');if(!trim($n)||$u[$n])exit(header('HTTP/1.1 418'));
$m[]=[$t,$u[$l]?
"<i><b>$l</b> is now known as <b>$n</b>.</i>":
"<i><b>$n</b> has entered the chat.</i>"];
$u[$n]=$u[$l]?:$t;unset($u[$l]);include('c.php');
n.php (65 bytes) recupera a lista de utilizador n ames
<?include('o.php');foreach($u as$k=>$v)echo"<option>$k</option>";
l.php (98 bytes) Usuário l eft (fechou o navegador)
<?include('o.php');$m[]=[$t,"<i><b>$l</b> has left the chat.</i>"];
unset($u[$l]);include('c.php');