[±è¼º¹Î]´ÔÀÌ ³²±â½Å ±Û:
>
>php ·Î ¼ÒÄϼ¹ö ÇÏ´Â ¼Ò½ºÀä.. --> server.php
>
>#!/usr/local/bin/php -q
><?
>set_time_limit(0);
>
>define("_IP", "111.222.333.12");
>define("_PORT", "8888");
>
>$sSock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
>
>socket_bind($sSock, _IP, _PORT);
>socket_listen($sSock);
>
>pcntl_signal(SIGCHLD, SIG_IGN);
>
>while($sock = socket_accept($sSock))
>{
> socket_getpeername($sock, $sockIp, $sockPort);
> msg("client connect :
".$sockIp.":".$sockPort."\n");
>
> $pid = pcntl_fork();
> msg("fork\n");
> if($pid == -1)
> {
> msg("fork failed\n");
> exit;
> // ÀÚ½Ä ÇÁ·Î¼¼½º À϶§
> }if($pid == 0)
> {
> while(1)
> {
> $buf = socket_read($sock, 4096);
>
> // Á¢¼Ó Á¾·á
> if(!$buf)
> {
> msg("client connection broken :
".$sockIp.":".$sockPort."\n");
> exit;
> }
> // ¸Þ½ÃÁö ¼ö½Å À̺¥Æ®
> else
> {
> msg("recive data : ".$buf."\n");
> $cmd = substr($buf, 0, 4);
> switch($cmd)
> {
> // ½Ã°£Àü¼Û
> case "time":
> msg("client(".$sockPort.") time data
request\n");
> socket_write($sock, date("Y/m/d
H:i:s"));
> break;
>
> // Á¾·á
> case "quit":
> msg("client(".$sockPort.") quit
request\n");
> socket_write($sock, "quit");
> socket_close($sock);
> exit;
> break;
> default:
> msg("client(".$sockPort.") invalid command
$cmd\n");
> break;
> }
> }
> }
> }
>}
>
>function msg($msg)
>{
> echo "SERVER >> ".$msg;
>}
>?>
>
>
>ÀÌ°Ô Çغ¸´Ï µÇ±â´Â Çϴµ¥, Ŭ¶óÀ̾ðÆ®°¡ server.php ½ÇÇàµÇ°í ÀÖ´Â ¼¹ö¿¡ 8888 Æ÷Æ®·Î
ÃÖÃÊ Á¢¼ÓÇÏ°í ¾Æ¹«ÀÔ·Â ¾øÀÌ °¡¸¸È÷ ÀÖÀ¸¸é server.php ¿¡¼µµ ÀÚ½ÄÇÁ·Î¼¼½º°¡ ¹«ÇÑÁ¤
»ì¾ÆÀÖ´Â »óŶó´Â°Í°ú, $cmd ¿¡ ÇØ´çÇϴ Ŭ¶óÀ̾ðÆ®-> ¼¹ö. ·Î ¾î¶°ÇÑ ¸Þ½ÃÁö¸¦ ´øÁö°í
³ª¼ ¾Æ¹«°Íµµ ¾ÈÇÏ°í ÀÖÀ¸¸é ¸¶Âù°¡Áö·Î ¹«ÇÑÁ¤ ´ë±â »óŶó´Â ¹®Á¦°¡
Àִµ¥¿ä..
>
>óÀ½Á¢¼Ó½Ã³ª Á¢¼ÓÈÄ, ¾î¶°ÇÑ ¸Þ½ÃÁö¸¦ ´øÁö·Î ³ª¼ ¾Æ¹«°Íµµ ¾ÈÇÏ°í 00ÃÊ ÀÖÀ¸¸é
Ŭ¶óÀ̾ðÆ® ¿¬°áÀÌ ÀÚµ¿À¸·Î ²÷¾îÁöµµ·Ï ÇÏ´Â°É Çغ¸·Á°í Çϴµ¥ µµ¹«Áö
¾ÈµÇ¼¿ä..
>
>Ȥ. ÀÌ ºÎºÐ¿¡ ´ëÇØ Ã³¸®¹æ¹ýÀ» ¾Æ½Ã´ÂÁö Çؼ ¹®Àǵ帳´Ï´Ù..
========================================
Àú °°Àº °æ¿ì´Â sokect_select ±â¹ÝÀ¸·Î ÀÛ³âÃÊ¿¡ ICAP ¼¹ö¸¦ ¸¸µé¾î¼ ¼ºñ½º¿¡
»ç¿ëÁßÀ̶ø´Ï´Ù(ȸ»ç¿¡¼
»ç¿ëÁßÀÌ¶ó¼ ¼Ò½º °ø°³´Â Èûµé°Í °°½À´Ï´Ù).
- ½Ã±×³Î ó¸®
- ¼ÒÄÏ ¿É¼Ç ¼³Á¤
- timeout ¼³Á¤
- socket_read/write Æ©´×
- ºÎÇÏ/¸Þ¸ð¸® »ç¿ë·® µîµî
ÀÌ·¸°Ô ´õ º¸¾ÈÇØ¾ß ÇÒ ºÎºÐÀÌ ²Ï ¸¹½À´Ï´Ù(¾ÆÁÖ ´Ü¼øÇÏ°Ô Â¥µµ 1000ÁÙÀÌ ³Ñ½À´Ï´Ù).
¿ì¼± client ¼ö°¡ ²Ï ¸¹°í Server Ãø¿¡¼ socket ¸¦ °Á¦·Î ¸ÕÀú close ÇÏ¸é ³ªÁß¿¡
TIME_WAIT »óÅ°¡ ²Ï ¸¹¾ÆÁö´Â ¹®Á¦°¡ »ý±é´Ï´Ù. ¶§¹®¿¡ °¡´ÉÇÑ Server Ãø¿¡¼ °Á¦·Î
Á¾·áÇÏ´Â °ÍÀº ¹Ù¶÷Á÷ÇÏÁö ¸øÇÕ´Ï´Ù. ¾î¿ ¼ö ¾ø´Â °æ¿ì´Â Á¦¿ÜÇÏ°í¿ä.
µû¶ó¼ client ¿¡¼ close ÇÏ´Â ¹æ¹ýÀ» ÅÃÇϽʽÿÀ.
±×¿Ü Server ¿¡¼ close ÇÏ·Á¸é,
while(1)
{
// A. À̺κп¡ timeout üũÇÏ¿© close ÇÔ
...
$buf = socket_read($sock, 4096);
...
}
timeout ¿¡ ´ëÇÑ start ´Â
1. Á¦ÀÏ Ã³À½ Á¢¼Ó½Ã
2. ÇØ´ç client socket ¿¡ socket_write() ÇÒ ¶§(1 ¿¡ ´ëÇؼ override)
Áï À§ÀÇ A ºÎºÐ¿¡¼ ¾ó¸¶³ª ½Ã°£ÀÌ Èê·¶´ÂÁö üũÇؼ ³Ê¹« ±æ°Ô Á¾·á¾ÈµÇ¾î ÀÖÀ¸¸é
°Á¦Á¾·áÇÏ´Â ½ÄÀ¸·Î ÇÁ·Î±×·¡¹Ö ÇÏ½Ã¸é µË´Ï´Ù.
Å°Æ÷ÀÎÆ®´Â while() ¹® ¾ÈÀ̳ª socket_select() ¹æ½ÄÀÏ °æ¿ì´Â ¹® ¾ÈÀÔ´Ï´Ù.
|