PHP¸¦ ÀÌ¿ëÇÑ ´ÙÁß ¿¬°á ¼ÒÄÏ Åë½Å (1)

ÀÌÁø¿ì

ÇÁ¸®·£¼­
ÇÁ·Î±×·¡¸Ó

            
          


Â÷·Ê
1. ¼Ò°³
1.1. PHP ÄÄÆÄÀÏ Çϱâ
1.2. PHPÀÇ ¼ÒÄÏ ÇÔ¼ö
2. ¼ÒÄÏ ¼­¹ö ¸¸µé±â
3. ¼ÒÄÏ Å¬¶óÀÌ¾ðÆ® ¸¸µé±â ¿Í ½ÇÇà
4. °á·Ð

À̹®¼­ÀÇ ¹èÆ÷´Â ÀÚÀ¯·Î¿ì³ª ÃÖ¼ÒÇÑ Á¦ÀÛÀÚÀÇ Á¤º¸´Â Á¦¿ÜÇÏÁö ¾Ê°í ¹èÆ÷ÇØ ÁÖ¼¼¿ä.

¹®¼­°¡ Á¸ÀçÇÏ´Â ¸ðµç°÷¿¡ ´äº¯À» µå¸±¼ö ¾øÀ¸¹Ç·Î Áú¹®Àº ȨÆäÀÌÁö(http://www.jinoos.com)¿¡¼­¸¸ ¹Þ½À´Ï´Ù.


1. ¼Ò°³

¾ÕÀ¸·Î ¸î¹ø¿¡ °Éó¼­ PHP¸¦ ÀÌ¿ëÇÑ ´ÙÁß ¿¬°á ¼ÒÄÏ Åë½Å¿¡ ´ëÇØ¼­ ¾Ë¾Æº¸°Ú½À´Ï´Ù. PHP´Â È®Àå ÇÔ¼ö·Î socket °è¿­ ÇÔ¼ö¸¦ Áö¿øÇÕ´Ï´Ù. ÇÏÁö¸¸ À̰ÍÀº ÄÄÆÄÀϽà --with-socket ¿É¼ÇÀ» ÁÖ¾î ÄÄÆÄÀÏ ÇØ¾ß ÇÕ´Ï´Ù. Ŭ¶óÀÌ¾ðÆ® ¼ÒÄÏ¿¡ °üÇÑ ÇÔ¼ö fsockopen()´Â À̰÷¿¡¼­ »ç¿ëÇÏÁö ¾Ê½À´Ï´Ù.


1.1. PHP ÄÄÆÄÀÏ Çϱâ

¾ÕÀ¸·Î ¼³¸íÇÒ ³»¿ëµéÀº ÀϹÝÀûÀÎ ¾ÆÆÄÄ¡ ¸ðµâ·Î¼­ÀÇ PHP°¡ ¾Æ´Ñ µ¶¸³ÀûÀ¸·Î ½ÇÇà °¡´ÉÇÑ PHP CGIÇüÅÂÀÔ´Ï´Ù. À̸¦ À§Çؼ­ Àç ÄÄÆÄÀÏÀÌ ÇÊ¿äÇϸç À̶§ ¼ÒÄÏ¿¡ °üÇÑ ¿É¼ÇÀ» Ãß°¡ÇÏ°Ô µË´Ï´Ù.

PHP 4.3.1 ¹öÀüÀ» ÀÌ¿ëÇß½À´Ï´Ù.

#] tar -zxvf php-4.3.1.tar.gz
#] cd php-4.3.1
#] ./configure --with-socket
#] make

make ¸¦ ÇÑÈÄ make install À» ÇÏÁö¸»°í php-4.3.1 µð·ºÅ͸®¸¦ º¸¸é php ¶ó´Â ½ÇÇàÆÄÀÏÀÌ »ý¼ºµÈ°ÍÀ» ¾Ë¼ö ÀÖ´Ù. ±×·³ ÀÌÁ¦ ÇÁ·Î±×·¥ © Áغñ´Â ´Ù�´Ù. °£´ÜÇѰ¡? °£´ÜÇÏ´Ù. -_-a


1.2. PHPÀÇ ¼ÒÄÏ ÇÔ¼ö

PHPÀÇ ¼ÒÄÏ ÇÔ¼ö ¸î°¡Áö¸¦ ¾Ë¾Æº¸°í ³Ñ¾î °¡µµ·Ï ÇÏÀÚ. PHPÀÇ ¼ÒÄÏ ÇÔ¼ö´Â C sys/socket.h ¿¡ Á¤ÀÇ µÇ¾îÀÖ´Â ÇÔ¼öµé°ú ¸Å¿ì À¯»çÇÏ´Ù. Âü°í Çϵµ·Ï ÇÏÀÚ.

socket_create ( int domain, int type, int protocol )

¼ÒÄÏÀÇ ¿¬°á ÀÚ¿øÀ» »ý¼º ÇÕ´Ï´Ù. ¼ÒÄÏ ÇÔ¼ö¸¦ »ç¿ëÇÒ¶§ ±âº»À¸·Î ¾²ÀÔ´Ï´Ù.

domain ÆÄ¶ó¸ÞÅÍ¿¡´Â AF_UNIX ¶Ç´Â AF_INET À¸·Î À¯´Ð½º µµ¸ÞÀÎ ¼ÒÄÏ ¶Ç´Â ÀÎÅÍ³Ý ¼ÒÄÏÀ¸·Î ÁöÁ¤ÇÕ´Ï´Ù.

type ÆÄ¶ó¸ÞÅÍ¿¡´Â STREAM, SOCK_DGRAM, SOCK_SEQPACKET, SOCK_RAW, SOCK_RDM, or SOCK_PACKET µîÀÇ ¼ÒÄÏÀÇ Á¾·ù°¡ ¼³Á¤ µË´Ï´Ù.

protocol ÆÄ¶ó¸ÞÅÍ¿¡´Â TCP¶Ç´Â UDP ¼³Á¤(SOL_UDP or SOL_TCP)À» ÇÕ´Ï´Ù.

socket_connect ( resource socket, string address [, int port] )

¼­¹ö¼ÒÄÏÀ¸·Î Á¢¼ÓÇÒ¶§ »ç¿ëÇÏ´Â ÇÔ¼ö. ¼ÒÄÏ Å¬¶óÀÌ¾ðÆ®¿¡¼­ »ç¿ëÇÏ´Â ÇÔ¼ö ÀÔ´Ï´Ù.

socket_setopt ( resource socket, int level, int optname, int )

¼ÒÄÏ¿¡ ¿É¼ÇÀ» ÁöÁ¤ÇÕ´Ï´Ù. Å©°Ô Áß¿äÇÏÁö ¾ÊÀº ÇÔ¼ö ÀÔ´Ï´Ù.-_-

socket_bind ( resource socket, string address [, int port] )

¼­¹ö ¼ÒÄÏ¿¡ ÁÖ¼Ò¿Í Æ÷Æ®¹øÈ£¸¦ ºÎ¿© ÇÕ´Ï´Ù. ¼­¹ö ¼ÒÄÏ¿¡¼­ ÇʼöÀûÀÎ ÀÛ¾÷ÀÔ´Ï´Ù.

¸¸¾à AF_UNIX·Î ÁöÁ¤Çß´Ù¸é port ÆÄ¶ó¸ÞÅÍ´Â »ý·«ÀÌ °¡´ÉÇÕ´Ï´Ù.

socket_listen ( resource socket [, int backlog] )

¼­¹ö ¼ÒÄÏÀ» Ŭ¶óÀÌ¾ðÆ® ´ë±â »óÅ·Π¸¸µì´Ï´Ù.

socket_listen() ÇÔ¼ö¸¦ È£ÃâÇÑ ÀÌÈĺÎÅÍ ¼­¹ö ¼ÒÄÏÀº Ŭ¶óÀÌ¾ðÆ®°¡ Á¢¼ÓÇÏ´ÂÁö ¾Æ´ÑÁö ±Í¸¦ ±â¿ïÀÌ´Â ÀÏÀ» ÇÏ°Ô µÇ´Â°Ì´Ï´Ù. ¼­¹ö ¼ÒÄÏ »ç¿ë¿¡¼­ Çʼö ÀûÀÔ´Ï´Ù.

backlog ÆÄ¶ó¸ÞÅÍ´Â ¹Þ¾ÆµéÀÏ Å¬¶óÀ̾ðÆ®ÀÇ ÃÖ´ë ¼ö¸¦ ÁöÁ¤ÇÕ´Ï´Ù. »ý·«Çϸé ÃÖ´ë °¹¼ö·Î ¼³Á¤µË´Ï´Ù.

¸®´ª½º¿¡¼­ ¼ÒÄÏÀÇ ÃÖ´ë °¹¼ö´Â ulimit -a ¸¦ ÇØº¸½Ã¸é open files Ç׸ñÀÌ ¼ÒÄÏ ÃÖ´ë °¹¼ö¿Í »óÀÀÇÕ´Ï´Ù.

socket_accept ( resource socket )

Ŭ¶óÀÌ¾ðÆ® Á¢¼ÓÀ» Çã°¡ ÇÒ¶§ »ç¿ëÇÏ´Â ÇÔ¼ö ÀÔ´Ï´Ù.

ÇÔ¼ö È£ÃâÈÄ »õ·Î¿î ¼ÒÄÏ ¸®¼Ò½º°¡ ¸®ÅϵǴµ¥ À̰ÍÀº ±âÁ¸¿¡ ¼­¹ö ¼ÒÄÏ ¸®¼Ò½º¿¡¼­ »ý¼ºµÈ Ŭ¶óÀÌ ¾ðÆ®¿Í Åë½ÅÇÏ´Â »õ·Î¿î ¼ÒÄÏ ¸®¼Ò½º ÀÔ´Ï´Ù.

socket_getpeername ( resource socket, string &addr [, int &port] )

Ŭ¶óÀ̾ðÆ®ÀÇ Á¢¼Ó Á¤º¸¸¦ °¡Á® ¿É´Ï´Ù.

socket_read ( resource socket, int length [, int type] )

¼ÒÄÏ¿¡¼­ length¸¸Å­ÀÇ Á¤º¸¸¦ ÀÐ¾î µéÀÔ´Ï´Ù.

type ÀоîµéÀÏ Å¸ÀÔÀ» °áÁ¤ ÇÕ´Ï´Ù.

  • PHP_BINARY_READ : ¹ÙÀ̳ʸ® ŸÀÔÀ¸·Î ÀÐ¾î µéÀÔ´Ï´Ù. 4.1.0 Æ÷ÇÔ ¹öÀü ÀÌÈĺÎÅÍ ±âº»°ªÀ¸·Î ¼³Á¤µÇ¾ú½À´Ï´Ù.

  • PHP_NORMAL_READ : \r¶Ç´Â \nÀÌ ÀԷµɶ§ ²÷¾î¼­ ÀнÀ´Ï´Ù. ÇѸ¶µð·Î ¶óÀÎ ´ÜÀ§·Î Àд ´Ù´Â ¸»ÀÌÁÒ. 4.1.0ÀÌÀü ¹öÀü¿¡¼± ±âº»°ª.

socket_write ( resource socket, string buffer [, int length] )

¼ÒÄÏ¿¡ Á¤º¸¸¦ ½á³Ö´Â ÇÔ¼ö·Î ¸¶Áö¸· ÀÎÀÚ¸¦ »ý·«Çϸé bufferÀÇ ±æÀ̰¡ ÀÚµ¿À¸·Î ´ëÀԵ˴ϴÙ.

socket_close ( resource socket )

¼ÒÄÏ ¿¬°áÀ» ²÷´Â´Ù.


2. ¼ÒÄÏ ¼­¹ö ¸¸µé±â

ÀÌÁ¦ ½ÇÀüÀ¸·Î µé¾î°¡ º¸°Ú´Ù. ¿À´Ã ¸¸µé°ÍÀº °£´ÜÇÏ°Ô Å¬¶óÀÌ¾ðÆ®°¡ Á¢¼ÓÇϸé Ŭ¶óÀ̾ðÆ®ÀÇ Á¢¼Ó Á¤º¸¸¦ Ãâ·ÂÇϰí Ŭ¶óÀÌ¾ðÆ®¿¡°Ô ÇöÀç ³¯ÀÚ¿Í ½Ã°£À» Àü¼ÛÇÑÈÄ Á¾·á ÇÕ´Ï´Ù.

¾ö¹ÐÈ÷ ¸»ÇÏ¸é ¿À´Ã ¸¸µé ¼ÒÄÏ ¼­¹ö´Â ´ÙÁß »ç¿ëÀÚ¸¦ À§ÇÑ ½Ã½ºÅÛÀº ¾Æ´Ï´Ù. ÇÏÁö¸¸ ¿À´ÃÀº °£´ÜÈ÷ ¼ÒÄÏÀÇ °³³äÀ» Áý°í ³Ñ¾î°¡´Â Àǹ̷Π»ý°¢ÇÏÀÚ.

PHP¸¦ CGIÇüÅ·Π½ÇÇàÇϱâ À§Çؼ­ ¼Ò½ºÄÚµå »ó´Ü¿¡

#!/usr/local/bin/php -q
<?php
..
..
..
?>

ó·³ ÇÁ·Î±×·¡¹ÖÀ» ÇÕ´Ï´Ù. À̰ÍÀº Perl½ºÅ©¸³Æ®³ª ±âŸ ½© ½ºÅ©¸³Æ®¿¡¼­ Àü󸮱⸦ ¼³Á¤Çϴ°Ͱú °°Àº ¹æ¹ý ÀÔ´Ï´Ù. -q ¿É¼ÇÀº http protocol Çì´õ¸¦ Á¦°Å ÇÏ´Â ¿É¼ÇÀÔ´Ï´Ù.

#!/usr/local/bin/php -q
<?php
define("_IP",    "123.123.123.12");
define("_PORT",  "65000");

$sSock      = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_bind($sSock, _IP, _PORT);
socket_listen($sSock);
while($cSock = socket_accept($sSock))
{
    socket_getpeername($cSock, $addr, $port);
    echo "SERVER >> client connected $addr:$port \n";
    $date = date("Y/m/d H:i:s");
    socket_write($cSock, $date);
    socket_close($cSock);
    echo "SERVER >> client Close.\n";
}
?>

¼­¹ö´Â Áö¼ÓÀûÀ¸·Î Ŭ¶óÀÌ¾ðÆ®¸¦ ±â´Ù¸®´Â ÇüÅÂÀÇ ¸ð½ÀÀ» Çϰí ÀÖ½À´Ï´Ù.


3. ¼ÒÄÏ Å¬¶óÀÌ¾ðÆ® ¸¸µé±â ¿Í ½ÇÇà

Ŭ¶óÀÌ¾ðÆ®´Â ¼­¹ö¿¡ Á¢¼ÓÀ» ÇÏ°í ¼­¹öÂÊ¿¡¼­ º¸³»¿Â ¸Þ½ÃÁö¸¦ ÀÐÀºµÚ Ãâ·ÂÇϰí Á¾·áÇÕ´Ï´Ù.

ÁÖÀÇ

ÇÁ·Î±×·¥»óÀÇ ¾ÆÀÌÇÇ´Â °¡»óÀ¸·Î ¸¸µç °ÍÀÔ´Ï´Ù. Å×½ºÆ®½Ã ÀûÀýÇÑ ¾ÆÀÌÇÇ·Î º¯°æÇØ ÁÖ¼¼¿ä.

#!/home/dimeclub/www/bin/php/php -q
<?php
define("_IP",    "123.123.123.12");
define("_PORT",  "65000");

$sock      = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_connect($sock, _IP, _PORT);
echo "CLIENT >> socket connect to "._IP.":"._PORT."\n";
$date = socket_read($sock, 4096);
echo "CLIENT >> this time is $date \n";
socket_close($sock);
echo "CLIENT >> socket closed.\n";
?>

³Ê¹« °£´ÜÇÏ´Ù°í µ¹ ³¯¾Æ¿À°Ú³×¿ä. -_-a. À§ µÎ ÆÄÀÏÀ» server.php, client.php¶ó ÀúÀåÇÏ°í ½ÇÇà±ÇÇÑÀ» ÁØµÚ ½ÇÇàÇØ º¸µµ·Ï ÇϰڽÀ´Ï´Ù.

¾Æ·¡ È­¸éÀÇ #]´Â ½© Ä¿¸Çµå ÀÔ´Ï´Ù.

#]
#] ll
total 8
-rwxr-xr-x    1 jinoos   jinoos        387 May  7 04:59 client.php
-rwxr-xr-x    1 jinoos   jinoos        495 May  7 04:59 server.php
#]
#] ./server.php &
[1] 23833
#]
#] ./client.php 
SERVER >> client connected 123.123.123.12:45188 
SERVER >> client Close.
CLIENT >> socket connect to 123.123.123.12:65000
CLIENT >> this time is 2003/05/07 04:59:49 
CLIENT >> socket closed.
#]
#] ./client.php 
SERVER >> client connected 123.123.123.12:45358 
SERVER >> client Close.
CLIENT >> socket connect to 123.123.123.12:65000
CLIENT >> this time is 2003/05/07 05:01:03 
CLIENT >> socket closed.
#]
#]

À§ ³»¿ëÀº ¼­¹öÇÁ·Î±×·¥À» ¹é±×¶ó¿îµå·Î ½ÇÇàÇϰí, ªÀº ½Ã°£µ¿¾È µÎ¹ø Ŭ¶óÀÌ¾ðÆ®·Î ¼­¹ö¿¡ Á¢¼ÓÇÑ ¸ð½ÀÀÔ´Ï´Ù. ¿øÇÏ´øµ¥·Î Ãâ·ÂµÈ°ÍÀ» È®ÀÎÇÒ¼ö ÀÖ½À´Ï´Ù.

°°Àº ¸Ó½Å »ó¿¡¼­ Á¢¼ÓÇÏ°Ô µÈ´Ù¸é ¼­¹ö¿Í Ŭ¶óÀÌ¾ðÆ®¿¡¼­ °°Àº IP¸¦ Ãâ·ÂÇÏ°Ô µÉ°ÍÀÔ´Ï´Ù. ±×¸®°í Àߺ¸¸é Ŭ¶óÀ̾ðÆ®ÀÇ PORT°¡ º¯°æµÇ¾ú´Âµ¥ Ŭ¶óÀ̾ðÆ®ÀÇ ¸Ó½ÅÀÇ °æ¿ì ÀÏÁ¤ ´ë¿ªÀÇ Æ÷Æ®Áß »ç¿ëÇÏÁö ¾Ê´Â Æ÷Æ®¸¦ ÀÚµ¿À¸·Î »ç¿ëÇÏ´Â °ÍÀÔ´Ï´Ù. À̰ÍÀ» ÇÁ·Î±×·¥»óÀ¸·Î Á¶Á¤Çϴ°ÍÀº ¾Æ´Õ´Ï´Ù. OS¿¡¼­ ÀÚµ¿ÀûÀ¸·Î ÇÒ´çµÈ°ÍÀ» »ç¿ëÇϴ°ÍÀÔ´Ï´Ù.


4. °á·Ð

¿À´ÃÀº °£´ÜÇÏ°Ô PHP¸¦ ÀÌ¿ëÇØ¼­ ¼ÒÄÏÇÔ¼ö¸¦ »ç¿ëÇÏ´Â °ÍÀ» ÇØº¸¾Ò½À´Ï´Ù. ´ÙÀ½½Ã°£¿¡´Â PHPÀÇ Process Control Functions ÇÔ¼öµéÀ» ÀÌ¿ëÇØ¼­ Fork¸¦ »ç¿ëÇÑ ¿À´Ã º¸´Ù Á»´õ Áøº¸µÈ ´ÙÁß Á¢¼Ó ¼­¹ö ¼ÒÄÏÀ» ¸¸µé¾î º¸°Ú½À´Ï´Ù.