PHP + JQuery + HTML + CSS, 1535 byte
Ini adalah submission yang lebih condong ke apa yang dianggap OP sebagai 'tujuan aktual'. Yaitu, server obrolan yang berfungsi penuh, yang dapat di-host di hampir semua server web di mana saja.
Fungsionalitas meliputi:
- Pemberitahuan saat pengguna masuk atau keluar dari ruang obrolan.
- Pemberitahuan saat pengguna mengubah alias mereka.
- Polling waktu nyata untuk pesan baru, tanpa menghasilkan lalu lintas server berlebih, atau beban server.
- Tata letak dan kegunaan sangat menyerupai klien obrolan yang ada, seperti X-Chat.
Untuk menjadi sesi, masukkan alias di kotak yang sesuai, dan tekan Tabatau Enteruntuk mengirim. Jika alias sudah digunakan, Anda akan diberi tahu. Mengirim pesan juga dilakukan melalui Enter.

Untuk kenyamanan Anda, arsip semua file dapat ditemukan di sini: chat.zip (pilih Unduh dari menu File). Untuk menginstal, buka paket ke direktori web di server mana saja yang menjalankan PHP 5.4 atau lebih tinggi.
Peringatan:
- IE 8 atau lebih rendah akan berputar menjadi loop tak terbatas saat pemungutan suara, karena untuk beberapa alasan yang tidak diketahui umat manusia, semua permintaan Ajax di-cache secara default. Ini juga mencegah Anda mengirim pesan yang sama dua kali, dan memperbarui daftar pengguna dengan benar. Ini bisa diperbaiki dengan menambahkan
cache:falseke setiap permintaan Ajax.
- Di semua versi IE, pesan tidak akan dikirim dengan menekan Enter, karena
changeacara tidak dipicu (menekan Tab, bagaimanapun, tidak berfungsi). Ini bisa diperbaiki dengan menambahkan onkeypresspawang, memeriksa apakah kuncinya adalah Enter, dan kemudian memanggil $(v).blur().focus().
Singkatnya, IE tidak didukung.
Klien
Posisi elemen bisa sedikit lebih kuat, tetapi harus terlihat baik-baik saja dengan ukuran jendela minimum sekitar ~ 800x600.
chat.htm (190 byte)
<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})})
Server
Saya minta maaf untuk server yang dipecah menjadi begitu banyak potongan kecil Alternatifnya adalah dengan menggunakan protokol pesan yang memadai (melalui JSON encode / decode), atau memiliki besar if ... elseif ...sesuai dengan variabel posting yang hadir. Membuat skrip terpisah, meminta hanya dari yang Anda butuhkan jauh lebih pendek, dan mungkin lebih sederhana dari keduanya.
o.php (119 bytes) O pens sebagai koneksi ke 'database'
<?$m=array_slice(unserialize(file_get_contents(m)),-300);
$u=unserialize(file_get_contents(u));$t=time();extract($_GET);
c.php (57 bytes) C ommits perubahan ke 'database'
<?foreach([u,m]as$c)file_put_contents($c,serialize($$c));
p.php (151 bytes) P olls untuk pesan baru
<?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 mengakhiri pesan ke server
<?include('o.php');$m[]=[$t,"<b>$n</b>: $v"];include('c.php');
u.php (222 bytes) U pendaftaran ser atau perubahan 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 byte) Mengambil daftar pengguna n ames
<?include('o.php');foreach($u as$k=>$v)echo"<option>$k</option>";
l.php (98 byte) Pengguna memiliki l eft (menutup peramban mereka)
<?include('o.php');$m[]=[$t,"<i><b>$l</b> has left the chat.</i>"];
unset($u[$l]);include('c.php');