http://cafe.naver.com/q69/82567

공유메모리를 이용한 채팅


 


공유메모리 함수이용(파일은 6개)


PHP 설치시 --enable-sysvsem 옵션이 지정되어야 사용 가능합니다


 


index.html ==> 프래임 파일
==============================================
<HTML>
<HEAD>
<TITLE>공유 메모리를 이용한 안개 채팅!!</TITLE>
<frameset rows="0%,70%,30%" frameborder=0 border=0>
<frame src="null.html" name="hidden">
<frame src="./message.html" name="up">
<frame src="./login.html" name="down">
</frameset>
</HTML>
==============================================

message.html ==> 안내문구 파일
==============================================
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=euc-kr">
<link rel="stylesheet" href="/chatting/style.css" type="text/css">
</head>
<body bgcolor="#FFFFFF" text="#000000" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">
<p>&nbsp;</p>
<table width="300" border="0" cellspacing="1" cellpadding="2" align="center" bgcolor="#333333">
  <tr>
    <td bgcolor="#FFFFFF" class="mainText">
      <p>안냐세요.. 


        공유메모리를 이용한 체팅방p>
      <p>하단에 이름을 입력하시고 엔터,
        내용에 원하시는 메시지를 입력하시고 엔터를...</p>
    </td>
  </tr>
</table>
</body>
</html>
=========================================================

style.css스타일 시트 파일
=========================================================
.mainText {  font-family: "굴림", "굴림체"; font-size: 9pt; line-height: 150%; color: #333333}
=========================================================

위의 세개 파일은 프로그램이 들어 있지 않습니다. 단순 html파일들이죠..
담부터 잘 보시길

login.html ==> 대화명 입력 및 대화 입력 창
=========================================================
<?php

if ($action != 'login' || !$nicName) {
    echo("
<html>
<head><link rel='stylesheet' href='/chatting/style.css' type='text/css'></head>
<body class='mainText' leftmargin='0' topmargin='0' marginwidth='0' marginheight='0'>
<form name='form1' action='$PHP_SELF' method='post'>
<input type='hidden' name='action' value='login'>
대화명 입력 : <input type='text' name='nicName'>
</form>
</body>
</html>
    ");
    exit;
}

echo ("
<html>
<head>
<link rel='stylesheet' href='/chatting/style.css' type='text/css'>
<script Language='javascript'>
parent.up.location.replace('view.html?name=$nicName');
</script>
</head>
<body class='mainText' leftmargin='0' topmargin='0' marginwidth='0' marginheight='0'>
<form name='form1' action='putMessage.html' method='post' target='hidden'>
<input type='hidden' name='name' value='$nicName'>
내용 : <input type='text' size='30' name='comment'>
</form>
<script Language='javascript'>
document.form1.comment.focus();
</script>
</body>
</html>
");

$shm_key = 0x8888;
$semid = sem_get($shm_key,10);
sem_acquire($semid);
$shmid = shm_attach($shm_key,46084);

$message = "<font size='2' color='black'>[ 관리자 공지] {$nicName}님께서 입장하셨습니다.</font>";
shm_put_var ($shmid,1,$message); // 초기 공지를 저장

shm_detach ($shmid);
sem_release($semid);
?>
=====================================================

view.html ==> 대화내용이 나오는 페이지
=====================================================
<?php
##### 서버푸쉬를 위한 헤더 함수 호출
header("Content-type:multipart/mixed");


print("
    <html>
    <head><title>메일 전송 테스트</title>
    <link rel='stylesheet' href='/chatting/style.css' type='text/css'>
    </head>
    <body class='mainText' leftmargin='0' topmargin='0' marginwidth='0' marginheight='0'>
");
flush(stdout);

##### 공유 메모리 지정
$shm_key = 0x8888;

$chkTime = time();

$temp = "no";

while (1) {
    $shmid = shm_attach($shm_key,46084,0400);
    $message = shm_get_var ($shmid,1); // 공유메모리에 저장된 체팅 클래스를 가져옴
    shm_detach ($shmid);
    $chkmessage = substr($message,0,7);

    if ($temp != $message) {
        print ("
            $message
            <script Language='javascript'>
            self.scroll(0,100000000);
            </script>
        ");
        $temp = $message;
        $chkTime = time();
    }

    if ($chkTime < time() - 120) {
        echo ("
        <script Language='javascript'>
        alert('2분 동안 아무도 메시지 입력이 없어 대화방이 닫힙니다.');
        parent.location.replace('index.html');
        </script>
        ");
        break;
    }

    flush(stdout);
    usleep(100000);
}
shm_detach ($shmid);
?>
========================================================

putMessage.html => 메시지를 입력시키는 페이지
========================================================
<?php
##### 메시지를 공유메모리상의 클래스에 집어 넣는 프로그램
$shm_key = 0x8888;
$semid = sem_get($shm_key,10);
sem_acquire($semid);
$shmid = shm_attach($shm_key,46084);

$message = "<font size='2' color='black'>[".$name."] ".$comment."</font>";

shm_put_var($shmid,1,$message);
shm_detach ($shmid);
sem_release($semid);


echo ("
<script Language='javascript'>
parent.down.document.form1.comment.value='';
parent.down.document.form1.comment.focus();
</script>
");
exit;
?>
=======================================================