PHP + JQuery + HTML + CSS, 1535 Byte
Dies ist ein Beitrag, der eher dem entspricht, was das OP als "das eigentliche Ziel" ansieht. Dies ist ein voll funktionsfähiger Chat-Server, der auf nahezu jedem Webserver gehostet werden kann.
Die Funktionalität umfasst:
- Benachrichtigungen, wenn Benutzer den Chatraum betreten oder verlassen.
- Benachrichtigungen, wenn Benutzer ihren Alias ändern.
- Echtzeit-Abfrage nach neuen Nachrichten, ohne übermäßigen Serververkehr oder Serverauslastung zu generieren.
- Layout und Benutzerfreundlichkeit ähneln stark vorhandenen Chat-Clients, wie beispielsweise X-Chat.
Um eine Sitzung zu sein, geben Sie einen Alias in das entsprechende Feld ein und drücken Sie Taboder Enter, um zu übermitteln. Wenn der Alias bereits verwendet wird, werden Sie benachrichtigt. Das Senden von Nachrichten erfolgt ebenfalls über Enter.

Ein Archiv aller Dateien finden Sie hier: chat.zip (wählen Sie "Download" im Menü "Datei"). Entpacken Sie zum Installieren in ein Webverzeichnis auf einem Server, auf dem PHP 5.4 oder höher ausgeführt wird.
Vorsichtsmaßnahmen:
- IE 8 oder niedriger wird beim Abrufen in eine Endlosschleife umgewandelt, da aus irgendeinem Grund, den die Menschheit nicht kennt, alle Ajax-Anforderungen standardmäßig zwischengespeichert werden. Außerdem wird verhindert, dass Sie dieselbe Nachricht zweimal senden und die Benutzerliste ordnungsgemäß aktualisieren. Dies könnte durch Hinzufügen
cache:falsezu jeder Ajax-Anfrage behoben werden .
- In allen IE-Versionen werden Nachrichten nicht durch Drücken der Eingabetaste gesendet, da das
changeEreignis nicht ausgelöst wird (das Drücken der Tabulatortaste funktioniert jedoch). Dies kann behoben werden, indem Sie einen onkeypressHandler hinzufügen , prüfen, ob der Schlüssel die Eingabetaste ist, und dann anrufen $(v).blur().focus().
Kurz gesagt, IE wird nicht unterstützt.
Klient
Die Positionierung von Elementen könnte etwas robuster sein, sollte aber mit einer minimalen Fenstergröße von ca. 800x600 gut aussehen.
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})})
Server
Ich entschuldige mich dafür, dass der Server in so viele kleine Brocken aufgeteilt wurde. Die Alternative wäre die Verwendung eines geeigneten Nachrichtenprotokolls (über JSON-Codierung / -Decodierung) oder die Verwendung eines großen Protokolls, if ... elseif ...nach dem Post-Variablen vorhanden sind. Das Erstellen separater Skripte, eine einfache Anforderung von dem, den Sie benötigen, ist viel kürzer und möglicherweise einfacher als beide.
o.php (119 bytes) O pens als verbindung zur 'datenbank'
<?$m=array_slice(unserialize(file_get_contents(m)),-300);
$u=unserialize(file_get_contents(u));$t=time();extract($_GET);
c.php (57 Byte) C ommits ändert sich in den 'Datenbank'
<?foreach([u,m]as$c)file_put_contents($c,serialize($$c));
p.php (151 bytes) P olls für neue Nachrichten
<?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 Beendet eine Nachricht an den Server
<?include('o.php');$m[]=[$t,"<b>$n</b>: $v"];include('c.php');
u.php (222 bytes) U ser Anmeldung oder Alias Änderung
<?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) Ruft die Liste der Benutzer n artien
<?include('o.php');foreach($u as$k=>$v)echo"<option>$k</option>";
l.php (98 bytes) Benutzer hat l eft (Browser geschlossen)
<?include('o.php');$m[]=[$t,"<i><b>$l</b> has left the chat.</i>"];
unset($u[$l]);include('c.php');