PHP + JQuery + HTML + CSS、1535バイト
これは、OPが「実際の目標」とみなしたものにより傾いた提出です。つまり、完全に機能するチャットサーバーであり、ほぼすべてのWebサーバーでホストできます。
機能が含まれます:
- ユーザーがチャットルームに出入りするときの通知。
- ユーザーがエイリアスを変更したときの通知。
- 過剰なサーバートラフィックやサーバー負荷を発生させることなく、新しいメッセージをリアルタイムでポーリングします。
- X-Chatなどの既存のチャットクライアントに非常によく似たレイアウトと使いやすさ。
セッションになるには、適切なボックスにエイリアスを入力し、TabまたはEnterを押して送信します。エイリアスが既に使用されている場合は、通知されます。メッセージの送信もを介して行われますEnter。

便宜上、すべてのファイルのアーカイブは、chat.zip([ファイル]メニューから[ダウンロード]を選択)にあります。インストールするには、PHP 5.4以降を実行しているサーバーのWebディレクトリに解凍します。
警告:
- IE 8以下は、ポーリング中に無限ループにスピンします。これは、何らかの理由で人類に知られておらず、すべてのAjaxリクエストがデフォルトでキャッシュされるためです。また、同じメッセージを2回送信して、ユーザーリストを適切に更新することもできません。これは
cache:false、すべてのAjaxリクエストに追加することで修正できます。
- IEのすべてのバージョンで
changeは、イベントがトリガーされないため、Enterキーを押してもメッセージは送信されません(ただし、Tabキーを押すと機能します)。これは、onkeypressハンドラーを追加し、キーがEnterかどうかを確認してからを呼び出すことで修正できます$(v).blur().focus()。
要するに、IEはサポートされていません。
クライアント
要素の配置はもう少し堅牢になる可能性がありますが、最小ウィンドウサイズが約800x600であれば問題なく見えるはずです。
chat.htm(190バイト)
<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バイト)
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バイト)
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})})
サーバ
サーバーが非常に多くの小さなチャンクに分割されていることをおizeび申し上げます。別の方法としては、適切なメッセージプロトコル(JSONエンコード/デコード経由)を使用するか、if ... elseif ...ポスト変数が存在するかどうかに応じて大きなプロトコルを使用します。別々のスクリプトを作成する場合、必要なスクリプトからの要求は、はるかに短く、おそらく両方よりも簡単です。
o.php(119バイト)O「データベース」への接続などのペン
<?$m=array_slice(unserialize(file_get_contents(m)),-300);
$u=unserialize(file_get_contents(u));$t=time();extract($_GET);
c.php(57バイト)C 'データベース'にommits変更を
<?foreach([u,m]as$c)file_put_contents($c,serialize($$c));
p.php(151バイト)Pの新しいメッセージのolls
<?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バイト)Sサーバーへのメッセージを送信します
<?include('o.php');$m[]=[$t,"<b>$n</b>: $v"];include('c.php');
u.php(222バイト)のU SER登録またはエイリアス変化
<?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バイト)ユーザーn amesのリストを取得します
<?include('o.php');foreach($u as$k=>$v)echo"<option>$k</option>";
l.php(98バイト)ユーザーがl eftを持っている(ブラウザを閉じた)
<?include('o.php');$m[]=[$t,"<i><b>$l</b> has left the chat.</i>"];
unset($u[$l]);include('c.php');