PHP + JQuery + HTML + CSS, 1535 बाइट्स
यह एक सबमिशन है जो ओपी को 'वास्तविक लक्ष्य' के रूप में समझा जाता है। यानी पूरी तरह कार्यात्मक चैट सर्वर, जिसे कहीं भी किसी भी वेब सर्वर के बारे में होस्ट किया जा सकता है।
कार्यक्षमता में शामिल हैं:
- जब उपयोगकर्ता चैट रूम में प्रवेश करते हैं या छोड़ते हैं तो सूचनाएं।
- जब उपयोगकर्ता अपना उपनाम बदलते हैं तो सूचनाएं।
- अतिरिक्त सर्वर ट्रैफ़िक, या सर्वर लोड उत्पन्न किए बिना नए संदेशों के लिए वास्तविक समय पर मतदान।
- लेआउट और प्रयोज्य दृढ़ता से मौजूदा चैट क्लाइंट जैसे X-Chat से मिलते जुलते हैं।
एक सत्र होने के लिए, उपयुक्त बॉक्स में एक उपनाम दर्ज करें, और सबमिट करें Tabया Enterसबमिट करें। यदि उपनाम पहले से उपयोग में है, तो आपको सूचित किया जाएगा। संदेश भेजने के माध्यम से भी किया जाता है Enter।

आपकी सुविधा के लिए, सभी फ़ाइलों का एक संग्रह यहां पाया जा सकता है: chat.zip (फ़ाइल मेनू से डाउनलोड चुनें)। स्थापित करने के लिए, PHP 5.4 या उच्चतर चलने वाले किसी भी सर्वर पर एक वेब निर्देशिका को अनपैक करें।
चेतावनियां:
- IE 8 या निचला मतदान करते समय एक अनंत लूप में घूमेगा, क्योंकि किसी कारण से मानवता के लिए अज्ञात, सभी Ajax अनुरोधों को डिफ़ॉल्ट रूप से कैश किया जाता है। यह आपको एक ही संदेश को दो बार भेजने और उपयोगकर्ता सूची को ठीक से अपडेट करने से भी रोकता है। यह
cache:falseहर अजाक्स अनुरोध में जोड़कर तय किया जा सकता है ।
- IE के सभी संस्करण में, Enter दबाकर संदेश नहीं भेजे जाएंगे, क्योंकि
changeघटना ट्रिगर नहीं है (टैब को दबाकर, हालांकि, काम करता है)। यह एक onkeypressहैंडलर जोड़कर तय किया जा सकता है , अगर कुंजी दर्ज की गई थी, और फिर कॉलिंग की जाँच करें $(v).blur().focus()।
संक्षेप में, IE समर्थित नहीं है।
ग्राहक
तत्वों की स्थिति थोड़ी अधिक मजबूत हो सकती है, लेकिन यह लगभग ~ 800x600 की न्यूनतम विंडो आकार के साथ ठीक दिखना चाहिए।
चैट.एचटीएम (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()>
सी। एस (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 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 सेर पंजीकरण या अन्य परिवर्तन
<?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');