Частый гость
Покинул форум
Сообщений всего: 139
Дата рег-ции: Янв. 2011
Помог: 0 раз(а)
|
Собственно, знаю, что в интернете полно свободно-распространяемых ajax-чатов, но всё-таки хотелось узнать, как оно работает. Поэтому написал свой. Он работает, только при попытке выложить в интернет, меня забанили, так как она создаёт очень большую нагрузку. Помогите с оптимизацией?
index.php
Спойлер (Отобразить)PHP:
скопировать код в буфер обмена
<html> <head> <link rel="stylesheet" type="text/css" href="style.css"> <title> Чат Дениса Семёнова </title> <meta http-equiv="Content-Type" content="text/html;" charset="utf-8" /> <meta name="description" content="%s"> <meta name="keywords" content="%s"> </head> <body> <div id='all'> <div id='main'> <?PHP require('config.php'); mysql_connect($sqlhostname, $sqlusername, $sqlpassword) or die ("Не могу создать соединение"); $q="SELECT count(*) FROM chat "; $total_rows=$rowc[0]; if($total_rows>30){$begin=$total_rows-30;}else{$begin=0;} $query="SELECT id, author, text, addtime FROM chat ORDER BY id LIMIT $begin,30"; $id=$row['id']; $author=$row['author']; $text=$row['text']; $addtime=$row['addtime']; $string="<font size='1'>[$addtime] </font><b>$author:</b> $text<br>"; $messages.="$string"; } $body=" <script type='text/javascript' src='chat.js'></script> <script type='text/javascript' src='refresh_chat.js'></script> <div id='messages' style='text-align: left; background-color: #FFFFFF; border: 2px solid #000050; border-radius: 10px 10px 10px 10px; padding: 10px; overflow-y: hidden; height: 500px;'> $messages <script type='text/javascript'> document.getElementById('messages').scrollTop = document.getElementById('messages').scrollHeight - document.getElementById('messages').clientHeight; </script> </div> <input type='hidden' value='$id' id='id'> <p>Имя: <input type='text' name='author' id='author' size='15' onkeypress='callServer(\"k\");'> Сообщение: <input type='text' name='text' id='text' size='25' onkeypress='callServer(\"k\");'> <input type='button' value='Отправить' onclick='callServer(\"m\");'> </p> "; echo $body; ?> </div> </div> </body> </html>
config.php
chat.js
Спойлер (Отобразить)CODE ( javascript):
скопировать код в буфер обмена
function getXmlHttp(){ var xmlhttp; try { xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } catch (E) { xmlhttp = false; } } if (!xmlhttp && typeof XMLHttpRequest!='undefined') { xmlhttp = new XMLHttpRequest(); } return xmlhttp; } var xmlHttp =new getXmlHttp(); function callServer(type) { if ( type == "m" || event.keyCode == 13 ) { var author = document.getElementById("author").value; var text = document.getElementById("text").value; document.getElementById("text").value = ""; var send_post="author=" + author + "&text=" + text; var arr_of_words = new Array(); var arr_of_words = text.split(' '); a = 1; for(var i=0; i<arr_of_words.length; i++){ if(arr_of_words[i].length>30){a=0; alert("Вы ввели слишком длинное слово! Вы сломаете им чат! Разделите его пробелами!"); } } if(author.length<4){a=0; alert("Представьтесь, пожалуйста. Имя должно быть длиннее трёх символов."); } if(text.length<2){a=0; alert("Вводимое сообщение должно быть длиннее двух символов."); } if(a==0){a=1;}else{ var url = "dochat.php"; xmlHttp.open("POST", "dochat.php", true); xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); xmlHttp.setRequestHeader("Content-length", send_post.length); xmlHttp.setRequestHeader("Connection", "close"); xmlHttp.onreadystatechange = updatePage; xmlHttp.send(send_post); } } } function updatePage() { if (xmlHttp.readyState == 4) { var previous = document.getElementById("messages").innerHTML; var messages = xmlHttp.responseText; document.getElementById("messages").innerHTML = previous + messages; document.getElementById('messages').scrollTop = document.getElementById('messages').scrollHeight - document.getElementById('messages').clientHeight; document.getElementById("id").value = document.getElementById("id").value + 1; } }
dochat.php
Спойлер (Отобразить)PHP:
скопировать код в буфер обмена
<?PHP $author=$_POST['author']; $text=$_POST['text']; require('config.php'); mysql_connect($sqlhostname, $sqlusername, $sqlpassword) or die ("Не могу создать соединение"); $addtime="$d_now.$m_now.$y_now $h_now:$min_now:$second"; $que="INSERT INTO chat SET author='$author', text='$text', addtime='$addtime' "; echo "<font size='1'>[$addtime] </font><b>$author:</b> $text<br>"; ?>
refresh_chat.js
Спойлер (Отобразить)CODE ( javascript):
скопировать код в буфер обмена
function getXmlHttp(){ var xmlhttp; try { xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } catch (E) { xmlhttp = false; } } if (!xmlhttp && typeof XMLHttpRequest!='undefined') { xmlhttp = new XMLHttpRequest(); } return xmlhttp; } var xmlHttp =new getXmlHttp(); setInterval(function obnovit() { var id = document.getElementById("id").value; var send_post="id=" + id; var url = "refresh_chat.php"; xmlHttp.open("POST", "refresh_chat.php", true); xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); xmlHttp.setRequestHeader("Content-length", send_post.length); xmlHttp.setRequestHeader("Connection", "close"); xmlHttp.onreadystatechange = updatePage2; xmlHttp.send(send_post); }, 1000) function updatePage2() { if (xmlHttp.readyState == 4) { var response = eval("(" + xmlHttp.responseText + ")"); with (response) { text = messages; document.getElementById("id").value = last; } var previous = document.getElementById("messages").innerHTML; document.getElementById("messages").innerHTML = previous + text; document.getElementById('messages').scrollTop = document.getElementById('messages').scrollHeight - document.getElementById('messages').clientHeight; } }
refresh_chat.php
Спойлер (Отобразить)PHP:
скопировать код в буфер обмена
<?PHP $id=$_POST['id']; require('config.php'); mysql_connect($sqlhostname, $sqlusername, $sqlpassword) or die ("Не могу создать соединение"); $query="SELECT id, author, text, addtime FROM chat WHERE id>$id ORDER BY id"; $id=$row['id']; $author=$row['author']; $text=$row['text']; $addtime=$row['addtime']; $all.="<font size='1'>[$addtime] </font><b>$author:</b> $text<br><input type='hidden' value='$id' id='id'>"; } echo "{\"messages\":\"$all\",\"last\":\"$id\"}"; ?>
style.css
Спойлер (Отобразить)CODE ( html):
скопировать код в буфер обмена
body{ font-family: Arial; background-color: #BCBBA5; margin: 0; } A, A:visited, A:active { text-decoration: none; color: #FFFFFF; } A:hover { color: 005; text-decoration: none; } #all{ display: block; width: 950px; height: 1000px; margin: auto; position: static; } #main{ display: block; float: left; width: 100%; border: 0px solid white; padding: 15px; text-align: justify; }
|