글
아래 채팅소스의 업그레이드판이다.
아래(http://www2.ssam.biz/blog/?tb=1&no=158)에서는 2초마다, 글보는 면을 새로고침해서, 변동사항을 반영하게 했는데, 이게 너무.. 거시기해보이고,, 해서,
서버쪽에서 누가 글을 올리던, 그 시간만 파일로 저장했다가,
화면이 출력된 시간하고 비교해서,
화면의 시간값보다 크면, 화면을 새로고침하고, 아니면,- 누가 글 올린게 없는거니까,- 그냥 버티고,,
이걸 2초마다 체크하는 걸로 바꿨다.
그니까 전폭적인 화면의 새로고침은 없고,
2초마다 보이지 않는 프레임에 파일을 띄워서,
시간을 확인하고, 변경사항이 있으면, 글보는 메인화면을 새로고침하도록... 했다.
이렇게 해서, 전체적인 부하 -서버,클라이언트 모두-를 줄일수 있다.
변경사항이 있을때만, 새로고침하게 되니까..
예제는 http://www2.ssam.biz/chat3.php이고,
아래와 중복되는 얘기는 생략한다.
<?
ob_start();
$db = "./777/chat.dat"; // 변경가능
$last = "./777/chat_last.dat";
?>
<center align="center">
<?
if($_POST[name] && $_POST[content]){
if(!$_COOKIE[name]) setcookie("name", $_POST[name], time() + 86400);
if($_COOKIE[name] != $_POST[name]) {
$memo = " @@@@@<font color=blue>".$_COOKIE[name]."</font>님이 필명을 <font color=blue>".$_POST[name]."</font>으로 바꿨습니다.\r\n";
setcookie("name");
setcookie("name", $_POST[name], time() + 86400);
$fp = fopen($db,"a");
fputs($fp,$memo);
fclose($fp);
}
$_POST[content] = preg_replace('`[\r\n]+`i', '', nl2br(stripslashes($_POST[content])));
$memo = $_POST[name]."@@@@@".$_POST[content]."\r\n";
$fp = fopen($db,"a");
fputs($fp,$memo);
fclose($fp);
$fp = fopen($last,"w");
fputs($fp,time());
fclose($fp);
?>
<script>
window.open("chat3.php?v=r","cbody");
location.replace("chat3.php?v=w");
</script>
<?
} else if($_GET[v]=="w") {
?>
<form method="post" action="chat3.php">
<table border=5 cellspacing=4 cellpadding=4 width=750>
<col width=70><col>
<tr><td><input type="text" name="name" style="width:70" value="<?=$_COOKIE[name]?>"></td>
<td><input type="text" name="content" style="width:560;height:20;font-size:9pt;overflow-y:auto"> <input type="submit" value="쓰기"></td>
</tr></table>
</form>
<?
} else if($_GET[v]=="b") {
if($_GET[refresh]!="stop") {
}
?>
<table border=5 cellspacing=4 cellpadding=4 width=750>
<col width=70><col>
<?
if(file_exists($db)){
$fp = fopen($db,"r");
$i = 1;
while(!feof($fp)){
$memo = fgets($fp);
$name = strtok($memo,"@@@@@");
$content = strtok("@@@@@");
if($name){
?>
<tr><td><?=$name?></td><td><?=$content?></td></tr>
<?
$i++;
}
}
fclose($fp);
}
?>
<tr><td><input type=hidden name=tme></td><td style='display:none'><a name="rrr"> </a></td></tr>
</table>
<p>
<script>
function tmev(){
today=new Date();
var tm = today.getTime();
document.all.tme.value = tm;
setTimeout("refre()", 2000);
}
tmev();
function refre(){
var tm = document.all.tme.value;
window.open("chat3.php?v=t&t=" + tm,"tim");
setTimeout("refre()", 2000);
}
</script>
<?
} else if($_GET[v]=="t") {
$fp = fopen($last,"r");
$lastt = fread($fp,10);
fclose($fp);
if($lastt > substr($_GET[t],0,10))
{
?>
<script>
window.open("chat3.php?v=r","cbody");
</script>
<?
}
} else if($_GET[v]=="r") {
?>
<script>
location.replace("chat3.php?v=b#rrr");
</script>
<?
} else {
?>
<html><head><title>[챗]</title></head>
<frameset rows="*,80, 10" frameborder="0" border="0" framespacing="0" onload="return true;" onunload="return true;">
<frame src="chat3.php?v=b#rrr" name="cbody" target="tim" marginwidth="0" marginheight="0" scrolling="auto" noresize>
<frame src="chat3.php?v=w" target="cbody" marginwidth="0" marginheight="0" scrolling="no" noresize>
<frame src="" name="tim" target="cbody" marginwidth="0" marginheight="0" scrolling="no" noresize>
</frameset>
</html>
<?
}
?>
</center>
<style>
* {font-size:9pt}
a {color:black}
a:link {text-decoration:none}
a:visited {text-decoration:none}
a:hover {text-decoration:underline}
table {border-width:6px; border-style: outset}
</style>
소스 맨위에
./777/chat.dat
여기서 777 은 디렉토리이름이다. 권한은 777을 준다.
그냥 경로니까, 각자 바꿔도 된다. 권한만 777주고,
chat.dat 파일은 채팅의 내용과 이름이 저장되고,
chat_last.dat 파일은 마지막 게시물의 시간이 저장된다.
물론 파일 이름은 바꿔줘도 된다.
또 파일이 없어도 된다. 없으면 새로 생성하니까.
chat3.php로 되어 있는 파일이름은
각자 수정해서 맘에 드는 이름으로 쓸수 있다.
예를들어 index.php로 쓰고자 할때는,
소스에서 chat3.php 라는 단어를 모두 삭제하면 된다.
(물론 index.php라는 단어로 바꿔줘도 되지만)
그니까 아주 모르는 사람을 위해 설명하자면,
이 소스를 긁어서 파일로 저장하고,
dat 파일이 저장될 경로 하나 생성해서, 권한777주고,
그냥 이 파일을 실행하면 되는 것이다.
아래(http://www2.ssam.biz/blog/?tb=1&no=158)에서는 2초마다, 글보는 면을 새로고침해서, 변동사항을 반영하게 했는데, 이게 너무.. 거시기해보이고,, 해서,
서버쪽에서 누가 글을 올리던, 그 시간만 파일로 저장했다가,
화면이 출력된 시간하고 비교해서,
화면의 시간값보다 크면, 화면을 새로고침하고, 아니면,- 누가 글 올린게 없는거니까,- 그냥 버티고,,
이걸 2초마다 체크하는 걸로 바꿨다.
그니까 전폭적인 화면의 새로고침은 없고,
2초마다 보이지 않는 프레임에 파일을 띄워서,
시간을 확인하고, 변경사항이 있으면, 글보는 메인화면을 새로고침하도록... 했다.
이렇게 해서, 전체적인 부하 -서버,클라이언트 모두-를 줄일수 있다.
변경사항이 있을때만, 새로고침하게 되니까..
예제는 http://www2.ssam.biz/chat3.php이고,
아래와 중복되는 얘기는 생략한다.
<?
ob_start();
$db = "./777/chat.dat"; // 변경가능
$last = "./777/chat_last.dat";
?>
<center align="center">
<?
if($_POST[name] && $_POST[content]){
if(!$_COOKIE[name]) setcookie("name", $_POST[name], time() + 86400);
if($_COOKIE[name] != $_POST[name]) {
$memo = " @@@@@<font color=blue>".$_COOKIE[name]."</font>님이 필명을 <font color=blue>".$_POST[name]."</font>으로 바꿨습니다.\r\n";
setcookie("name");
setcookie("name", $_POST[name], time() + 86400);
$fp = fopen($db,"a");
fputs($fp,$memo);
fclose($fp);
}
$_POST[content] = preg_replace('`[\r\n]+`i', '', nl2br(stripslashes($_POST[content])));
$memo = $_POST[name]."@@@@@".$_POST[content]."\r\n";
$fp = fopen($db,"a");
fputs($fp,$memo);
fclose($fp);
$fp = fopen($last,"w");
fputs($fp,time());
fclose($fp);
?>
<script>
window.open("chat3.php?v=r","cbody");
location.replace("chat3.php?v=w");
</script>
<?
} else if($_GET[v]=="w") {
?>
<form method="post" action="chat3.php">
<table border=5 cellspacing=4 cellpadding=4 width=750>
<col width=70><col>
<tr><td><input type="text" name="name" style="width:70" value="<?=$_COOKIE[name]?>"></td>
<td><input type="text" name="content" style="width:560;height:20;font-size:9pt;overflow-y:auto"> <input type="submit" value="쓰기"></td>
</tr></table>
</form>
<?
} else if($_GET[v]=="b") {
if($_GET[refresh]!="stop") {
}
?>
<table border=5 cellspacing=4 cellpadding=4 width=750>
<col width=70><col>
<?
if(file_exists($db)){
$fp = fopen($db,"r");
$i = 1;
while(!feof($fp)){
$memo = fgets($fp);
$name = strtok($memo,"@@@@@");
$content = strtok("@@@@@");
if($name){
?>
<tr><td><?=$name?></td><td><?=$content?></td></tr>
<?
$i++;
}
}
fclose($fp);
}
?>
<tr><td><input type=hidden name=tme></td><td style='display:none'><a name="rrr"> </a></td></tr>
</table>
<p>
<script>
function tmev(){
today=new Date();
var tm = today.getTime();
document.all.tme.value = tm;
setTimeout("refre()", 2000);
}
tmev();
function refre(){
var tm = document.all.tme.value;
window.open("chat3.php?v=t&t=" + tm,"tim");
setTimeout("refre()", 2000);
}
</script>
<?
} else if($_GET[v]=="t") {
$fp = fopen($last,"r");
$lastt = fread($fp,10);
fclose($fp);
if($lastt > substr($_GET[t],0,10))
{
?>
<script>
window.open("chat3.php?v=r","cbody");
</script>
<?
}
} else if($_GET[v]=="r") {
?>
<script>
location.replace("chat3.php?v=b#rrr");
</script>
<?
} else {
?>
<html><head><title>[챗]</title></head>
<frameset rows="*,80, 10" frameborder="0" border="0" framespacing="0" onload="return true;" onunload="return true;">
<frame src="chat3.php?v=b#rrr" name="cbody" target="tim" marginwidth="0" marginheight="0" scrolling="auto" noresize>
<frame src="chat3.php?v=w" target="cbody" marginwidth="0" marginheight="0" scrolling="no" noresize>
<frame src="" name="tim" target="cbody" marginwidth="0" marginheight="0" scrolling="no" noresize>
</frameset>
</html>
<?
}
?>
</center>
<style>
* {font-size:9pt}
a {color:black}
a:link {text-decoration:none}
a:visited {text-decoration:none}
a:hover {text-decoration:underline}
table {border-width:6px; border-style: outset}
</style>
소스 맨위에
./777/chat.dat
여기서 777 은 디렉토리이름이다. 권한은 777을 준다.
그냥 경로니까, 각자 바꿔도 된다. 권한만 777주고,
chat.dat 파일은 채팅의 내용과 이름이 저장되고,
chat_last.dat 파일은 마지막 게시물의 시간이 저장된다.
물론 파일 이름은 바꿔줘도 된다.
또 파일이 없어도 된다. 없으면 새로 생성하니까.
chat3.php로 되어 있는 파일이름은
각자 수정해서 맘에 드는 이름으로 쓸수 있다.
예를들어 index.php로 쓰고자 할때는,
소스에서 chat3.php 라는 단어를 모두 삭제하면 된다.
(물론 index.php라는 단어로 바꿔줘도 되지만)
그니까 아주 모르는 사람을 위해 설명하자면,
이 소스를 긁어서 파일로 저장하고,
dat 파일이 저장될 경로 하나 생성해서, 권한777주고,
그냥 이 파일을 실행하면 되는 것이다.
'웹스터디 > nosqlboardchat' 카테고리의 다른 글
채팅 소스 55 (mysql 안씀, ajax) - 닉도용 방지 (0) | 2008.05.26 |
---|---|
간단한 채팅7 -> 8 ->9 ->10 (0) | 2008.05.26 |
간단한 채팅소스 6 (0) | 2008.05.26 |
간단한 채팅소스5 (1) | 2008.05.26 |
간단한 채팅소스4 (0) | 2008.05.26 |
간단한 채팅소스2 (1) | 2008.05.26 |
간단한 채팅소스(또는 메모장) (0) | 2008.05.26 |
데이타 파일 (0) | 2008.05.26 |
게시판 설명3 (0) | 2008.05.26 |
게시판 설명2 (0) | 2008.05.26 |
RECENT COMMENT