À̹®¼ÀÇ ¹èÆ÷´Â ÀÚÀ¯·Î¿ì³ª ÃÖ¼ÒÇÑ Á¦ÀÛÀÚÀÇ Á¤º¸´Â Á¦¿ÜÇÏÁö ¾Ê°í ¹èÆ÷ÇØ ÁÖ¼¼¿ä.
¹®¼°¡ Á¸ÀçÇÏ´Â ¸ðµç°÷¿¡ ´äº¯À» µå¸±¼ö ¾øÀ¸¹Ç·Î Áú¹®Àº ȨÆäÀÌÁö(http://www.jinoos.com)¿¡¼¸¸ ¹Þ½À´Ï´Ù.
¾ÕÀ¸·Î ¸î¹ø¿¡ °Éó¼ PHP¸¦ ÀÌ¿ëÇÑ ´ÙÁß ¿¬°á ¼ÒÄÏ Åë½Å¿¡ ´ëÇØ¼ ¾Ë¾Æº¸°Ú½À´Ï´Ù. PHP´Â È®Àå ÇÔ¼ö·Î socket °è¿ ÇÔ¼ö¸¦ Áö¿øÇÕ´Ï´Ù. ÇÏÁö¸¸ À̰ÍÀº ÄÄÆÄÀϽà --with-socket ¿É¼ÇÀ» ÁÖ¾î ÄÄÆÄÀÏ ÇØ¾ß ÇÕ´Ï´Ù. Ŭ¶óÀÌ¾ðÆ® ¼ÒÄÏ¿¡ °üÇÑ ÇÔ¼ö fsockopen()´Â À̰÷¿¡¼ »ç¿ëÇÏÁö ¾Ê½À´Ï´Ù.
¾ÕÀ¸·Î ¼³¸íÇÒ ³»¿ëµéÀº ÀϹÝÀûÀÎ ¾ÆÆÄÄ¡ ¸ðµâ·Î¼ÀÇ 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
PHPÀÇ ¼ÒÄÏ ÇÔ¼ö ¸î°¡Áö¸¦ ¾Ë¾Æº¸°í ³Ñ¾î °¡µµ·Ï ÇÏÀÚ. PHPÀÇ ¼ÒÄÏ ÇÔ¼ö´Â C sys/socket.h ¿¡ Á¤ÀÇ µÇ¾îÀÖ´Â ÇÔ¼öµé°ú ¸Å¿ì À¯»çÇÏ´Ù. Âü°í Çϵµ·Ï ÇÏÀÚ.
¼ÒÄÏÀÇ ¿¬°á ÀÚ¿øÀ» »ý¼º ÇÕ´Ï´Ù. ¼ÒÄÏ ÇÔ¼ö¸¦ »ç¿ëÇÒ¶§ ±âº»À¸·Î ¾²ÀÔ´Ï´Ù.
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)À» ÇÕ´Ï´Ù.
¼¹ö¼ÒÄÏÀ¸·Î Á¢¼ÓÇÒ¶§ »ç¿ëÇÏ´Â ÇÔ¼ö. ¼ÒÄÏ Å¬¶óÀÌ¾ðÆ®¿¡¼ »ç¿ëÇÏ´Â ÇÔ¼ö ÀÔ´Ï´Ù.
¼ÒÄÏ¿¡ ¿É¼ÇÀ» ÁöÁ¤ÇÕ´Ï´Ù. Å©°Ô Áß¿äÇÏÁö ¾ÊÀº ÇÔ¼ö ÀÔ´Ï´Ù.-_-
¼¹ö ¼ÒÄÏ¿¡ ÁÖ¼Ò¿Í Æ÷Æ®¹øÈ£¸¦ ºÎ¿© ÇÕ´Ï´Ù. ¼¹ö ¼ÒÄÏ¿¡¼ ÇʼöÀûÀÎ ÀÛ¾÷ÀÔ´Ï´Ù.
¸¸¾à AF_UNIX·Î ÁöÁ¤Çß´Ù¸é port ÆÄ¶ó¸ÞÅÍ´Â »ý·«ÀÌ °¡´ÉÇÕ´Ï´Ù.
¼¹ö ¼ÒÄÏÀ» Ŭ¶óÀÌ¾ðÆ® ´ë±â »óÅ·Π¸¸µì´Ï´Ù.
socket_listen() ÇÔ¼ö¸¦ È£ÃâÇÑ ÀÌÈĺÎÅÍ ¼¹ö ¼ÒÄÏÀº Ŭ¶óÀÌ¾ðÆ®°¡ Á¢¼ÓÇÏ´ÂÁö ¾Æ´ÑÁö ±Í¸¦ ±â¿ïÀÌ´Â ÀÏÀ» ÇÏ°Ô µÇ´Â°Ì´Ï´Ù. ¼¹ö ¼ÒÄÏ »ç¿ë¿¡¼ Çʼö ÀûÀÔ´Ï´Ù.
backlog ÆÄ¶ó¸ÞÅÍ´Â ¹Þ¾ÆµéÀÏ Å¬¶óÀ̾ðÆ®ÀÇ ÃÖ´ë ¼ö¸¦ ÁöÁ¤ÇÕ´Ï´Ù. »ý·«Çϸé ÃÖ´ë °¹¼ö·Î ¼³Á¤µË´Ï´Ù.
¸®´ª½º¿¡¼ ¼ÒÄÏÀÇ ÃÖ´ë °¹¼ö´Â ulimit -a ¸¦ ÇØº¸½Ã¸é open files Ç׸ñÀÌ ¼ÒÄÏ ÃÖ´ë °¹¼ö¿Í »óÀÀÇÕ´Ï´Ù.
Ŭ¶óÀÌ¾ðÆ® Á¢¼ÓÀ» Çã°¡ ÇÒ¶§ »ç¿ëÇÏ´Â ÇÔ¼ö ÀÔ´Ï´Ù.
ÇÔ¼ö È£ÃâÈÄ »õ·Î¿î ¼ÒÄÏ ¸®¼Ò½º°¡ ¸®ÅϵǴµ¥ À̰ÍÀº ±âÁ¸¿¡ ¼¹ö ¼ÒÄÏ ¸®¼Ò½º¿¡¼ »ý¼ºµÈ Ŭ¶óÀÌ ¾ðÆ®¿Í Åë½ÅÇÏ´Â »õ·Î¿î ¼ÒÄÏ ¸®¼Ò½º ÀÔ´Ï´Ù.
Ŭ¶óÀ̾ðÆ®ÀÇ Á¢¼Ó Á¤º¸¸¦ °¡Á® ¿É´Ï´Ù.
¼ÒÄÏ¿¡¼ length¸¸ÅÀÇ Á¤º¸¸¦ ÀÐ¾î µéÀÔ´Ï´Ù.
type ÀоîµéÀÏ Å¸ÀÔÀ» °áÁ¤ ÇÕ´Ï´Ù.
PHP_BINARY_READ : ¹ÙÀ̳ʸ® ŸÀÔÀ¸·Î ÀÐ¾î µéÀÔ´Ï´Ù. 4.1.0 Æ÷ÇÔ ¹öÀü ÀÌÈĺÎÅÍ ±âº»°ªÀ¸·Î ¼³Á¤µÇ¾ú½À´Ï´Ù.
PHP_NORMAL_READ : \r¶Ç´Â \nÀÌ ÀԷµɶ§ ²÷¾î¼ ÀнÀ´Ï´Ù. ÇѸ¶µð·Î ¶óÀÎ ´ÜÀ§·Î Àд ´Ù´Â ¸»ÀÌÁÒ. 4.1.0ÀÌÀü ¹öÀü¿¡¼± ±âº»°ª.
¼ÒÄÏ¿¡ Á¤º¸¸¦ ½á³Ö´Â ÇÔ¼ö·Î ¸¶Áö¸· ÀÎÀÚ¸¦ »ý·«Çϸé bufferÀÇ ±æÀ̰¡ ÀÚµ¿À¸·Î ´ëÀԵ˴ϴÙ.
¼ÒÄÏ ¿¬°áÀ» ²÷´Â´Ù.
ÀÌÁ¦ ½ÇÀüÀ¸·Î µé¾î°¡ º¸°Ú´Ù. ¿À´Ã ¸¸µé°ÍÀº °£´ÜÇÏ°Ô Å¬¶óÀÌ¾ðÆ®°¡ Á¢¼ÓÇϸé Ŭ¶óÀ̾ðÆ®ÀÇ Á¢¼Ó Á¤º¸¸¦ Ãâ·ÂÇϰí Ŭ¶óÀÌ¾ðÆ®¿¡°Ô ÇöÀç ³¯ÀÚ¿Í ½Ã°£À» Àü¼ÛÇÑÈÄ Á¾·á ÇÕ´Ï´Ù.
¾ö¹ÐÈ÷ ¸»ÇÏ¸é ¿À´Ã ¸¸µé ¼ÒÄÏ ¼¹ö´Â ´ÙÁß »ç¿ëÀÚ¸¦ À§ÇÑ ½Ã½ºÅÛÀº ¾Æ´Ï´Ù. ÇÏÁö¸¸ ¿À´ÃÀº °£´ÜÈ÷ ¼ÒÄÏÀÇ °³³äÀ» Áý°í ³Ñ¾î°¡´Â Àǹ̷Π»ý°¢ÇÏÀÚ.
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";
}
?> |
¼¹ö´Â Áö¼ÓÀûÀ¸·Î Ŭ¶óÀÌ¾ðÆ®¸¦ ±â´Ù¸®´Â ÇüÅÂÀÇ ¸ð½ÀÀ» Çϰí ÀÖ½À´Ï´Ù.
Ŭ¶óÀÌ¾ðÆ®´Â ¼¹ö¿¡ Á¢¼ÓÀ» ÇÏ°í ¼¹öÂÊ¿¡¼ º¸³»¿Â ¸Þ½ÃÁö¸¦ ÀÐÀºµÚ Ãâ·ÂÇϰí Á¾·áÇÕ´Ï´Ù.
| ÁÖÀÇ |
ÇÁ·Î±×·¥»óÀÇ ¾ÆÀÌÇÇ´Â °¡»óÀ¸·Î ¸¸µç °ÍÀÔ´Ï´Ù. Å×½ºÆ®½Ã ÀûÀýÇÑ ¾ÆÀÌÇÇ·Î º¯°æÇØ ÁÖ¼¼¿ä. |
#!/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¿¡¼ ÀÚµ¿ÀûÀ¸·Î ÇÒ´çµÈ°ÍÀ» »ç¿ëÇϴ°ÍÀÔ´Ï´Ù.