PHP + JQuery + HTML + CSS, 1535 байт
Это представление больше склоняется к тому, что ФП считает «фактической целью». Это полнофункциональный чат-сервер, который может быть размещен практически на любом веб-сервере.
Функциональность включает в себя:
- Уведомления, когда пользователи входят или выходят из чата.
- Уведомления, когда пользователи меняют свой псевдоним.
- Опрос в режиме реального времени для новых сообщений, без создания избыточного трафика сервера или нагрузки на сервер.
- Макет и удобство использования очень напоминают существующие клиенты чата, такие как X-Chat.
Чтобы стать сеансом, введите псевдоним в соответствующем поле и нажмите Tabили Enterдля отправки. Если псевдоним уже используется, вы будете уведомлены. Отправка сообщений также осуществляется через Enter.

Для вашего удобства архив всех файлов можно найти здесь: chat.zip (выберите «Загрузить» в меню «Файл»). Для установки распакуйте в веб-каталог на любом сервере с PHP 5.4 или выше.
Предостережения:
- IE 8 или ниже будет вращаться в бесконечный цикл при опросе, потому что по какой-то неизвестной человечеству причине все Ajax-запросы кэшируются по умолчанию. Это также не позволяет вам отправлять одно и то же сообщение дважды и правильно обновлять список пользователей. Это можно исправить, добавив
cache:false к каждому запросу Ajax.
- Во всех версиях IE сообщения не будут отправляться нажатием Enter, поскольку
changeсобытие не вызывается (однако нажатие 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()>
ccc (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})})
сервер
Я прошу прощения за то, что сервер был разбит на множество крошечных кусочков. Альтернативой может быть использование адекватного протокола сообщений (через 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 пропускает изменения в «базе данных».
<?foreach([u,m]as$c)file_put_contents($c,serialize($$c));
p.php (151 байт) P ОЛЛС для новых сообщений
<?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 байт) Возвращает список пользователей н Эймс
<?include('o.php');foreach($u as$k=>$v)echo"<option>$k</option>";
l.php (98 байт) Пользователь имеет л EFT (закрыли их браузер)
<?include('o.php');$m[]=[$t,"<i><b>$l</b> has left the chat.</i>"];
unset($u[$l]);include('c.php');