PHP + JQuery + HTML + CSS, 1535 bajtów
Jest to oświadczenie skłaniające się bardziej w kierunku tego, co PO uznał za „faktyczny cel”. To znaczy w pełni funkcjonalny serwer czatu, który może być hostowany na dowolnym serwerze WWW w dowolnym miejscu.
Funkcjonalność obejmuje:
- Powiadomienia o wejściu lub wyjściu z pokoju czatu.
- Powiadomienia o zmianie aliasu przez użytkowników.
- Odpytywanie w czasie rzeczywistym o nowe wiadomości bez generowania nadmiernego ruchu lub obciążenia serwera.
- Układ i użyteczność bardzo przypominają istniejących klientów czatu, takich jak X-Chat.
Aby być sesją, wpisz alias w odpowiednim polu i naciśnij Tablub, Enteraby przesłać. Jeśli alias jest już używany, zostaniesz o tym powiadomiony. Wysyłanie wiadomości odbywa się również za pośrednictwem Enter.

Dla Twojej wygody archiwum wszystkich plików można znaleźć tutaj: chat.zip (wybierz polecenie Pobierz z menu Plik). Aby zainstalować, rozpakuj do katalogu internetowego na dowolnym serwerze z PHP 5.4 lub nowszym.
Ostrzeżenia:
- IE 8 lub niższa podczas sondowania zamieni się w nieskończoną pętlę, ponieważ z jakiegoś powodu nieznanego ludzkości wszystkie żądania Ajax są domyślnie buforowane. Zapobiega również dwukrotnemu wysłaniu tej samej wiadomości i poprawnej aktualizacji listy użytkowników. Można to naprawić, dodając
cache:falsedo każdego żądania Ajax.
- We wszystkich wersjach IE wiadomości nie będą wysyłane przez naciśnięcie Enter, ponieważ
changezdarzenie nie jest wyzwalane (naciśnięcie Tab jednak działa). Można to naprawić, dodając onkeypressmoduł obsługi, sprawdzając, czy klucz to Enter, a następnie wywołując $(v).blur().focus().
Krótko mówiąc, IE nie jest obsługiwany.
Klient
Pozycjonowanie elementów może być nieco bardziej niezawodne, ale powinno wyglądać dobrze przy minimalnym rozmiarze okna około ~ 800x600.
chat.htm (190 bajtów)
<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 bajtów)
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 bajtów)
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})})
serwer
Przepraszam, że serwer został podzielony na tak wiele małych kawałków. Alternatywą byłoby użycie odpowiedniego protokołu komunikatu (za pomocą kodowania / dekodowania JSON) lub dużego, if ... elseif ...zgodnie z obecnymi zmiennymi końcowymi. Tworzenie oddzielnych skryptów, po prostu żądanie od tego, czego potrzebujesz, jest o wiele krótsze i być może prostsze niż oba.
o.php (119 bajtów) O długopisy jako połączenie z „bazą danych”
<?$m=array_slice(unserialize(file_get_contents(m)),-300);
$u=unserialize(file_get_contents(u));$t=time();extract($_GET);
c.php (57 bajtów) C zaleca zmiany w „bazie danych”
<?foreach([u,m]as$c)file_put_contents($c,serialize($$c));
p.php (151 bajtów) P olls dla nowych wiadomości
<?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 bajty) S kończy komunikat do serwera
<?include('o.php');$m[]=[$t,"<b>$n</b>: $v"];include('c.php');
u.php (222 bajtów) U rejestracji Ser lub zmiana ps
<?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 bajtów) pobiera listę użytkowników n , ab
<?include('o.php');foreach($u as$k=>$v)echo"<option>$k</option>";
l.php (98 bajtów) Użytkownik ma l eft (zamknął przeglądarkę)
<?include('o.php');$m[]=[$t,"<i><b>$l</b> has left the chat.</i>"];
unset($u[$l]);include('c.php');