ºìÁªLinuxÃÅ»§
Linux°ïÖú

ÔÚLinuxϵͳÏÂʵÏÖServerPush

·¢²¼Ê±¼ä:2006-03-26 00:20:12À´Ô´:ºìÁª×÷Õß:google
¡¡¡¡ÓÉÓÚLinuxµÄ¿ª·ÅÐÔ£¬¼«´ó¼¤·¢Á˳ÌÐòÔ±µÄ´´ÔìÁ¦£¬Ê¹µÃÒÔLinuxΪ×÷ҵƽ̨µÄм¼Êõ²»¶Ï³öÏÖ¡£Server Push(ÍƼ¼Êõ)¾ÍÊÇÆäÖÐÒ»Àý¡£Ëü¿ÉÔÚÍêÈ«²»Ôö¼Ó³É±¾µÄ»ù´¡ÉÏ£¬Ê¹ÍøÕ¾´ïµ½×î¼ÑµÄÐÔÄÜ¡£±¾ÎĽ«¶ÔÆä½øÐÐÏêϸ½éÉÜ¡£
¡¡¡¡
¡¡¡¡¡¡¡¡Ò»¡¢»·¾³ÅäÖÃ
¡¡¡¡
¡¡¡¡¡¡¡¡ÎªÁËÔÚLinuxϸü³ä·ÖÁìÂÔServer PushµÄ¹¦ÄÜ£¬ÔÚÔËÐл·¾³ÉÏ£¬ÎÒÃÇÐè½øÐÐһЩѡÔñ¡£
¡¡¡¡
¡¡¡¡¡¡¡¡1.WWW·þÎñÆ÷
¡¡¡¡
¡¡¡¡¡¡¡¡Ê×ÏÈÒªÔÚLinuxÉÏ°²×°Apache£¬ÒÔ±ãÄÜ×ÔÓɱàÒ빦ÄÜÄ£¿é£¬ÕâÑù¿ÉÒÔ³ä·ÖʹÓÃServer Push¡¢FastCGI¡¢EPerlºÍPHPµÈеÄÀ©Õ¹¹¦ÄÜ¡£
¡¡¡¡
¡¡¡¡¡¡¡¡2.½Å±¾Ö§³Ö
¡¡¡¡
¡¡¡¡¡¡¡¡±ÊÕßÍƼöÓÃPerl»òCÓïÑÔÀ´Ð´CGI½Å±¾£¬ÒòΪPerlÒѾ­ÊÇCGI½Å±¾³ÌÐòÊÂʵÉϵıê×¼¡£¶øÇÒÔÚPerl 5ÖÐÒѾ­¿ÉÒÔÖ±½Óµ÷Óà C×Ó³ÌÐò¶ø²»ÐèÒªÈκÎÉùÃ÷¡£²»¹ÜÄãÓÃʲôÓïÑÔÀ´Ð´CGI½Å±¾£¬½âÊÍÆ÷ÖÐÓ¦¸ÃÓÐCGI.PMÄ£¿é£¬±ÊÕßÊÔÓõİ汾ÊÇ 5.004£¬Õâһģ¿éµÄ¸üаæ´ó¼Ò¿ÉÒÔ´ÓÍøÉÏÏÂÔØ¡£
¡¡¡¡
¡¡¡¡¡¡¡¡¶þ¡¢³ÌÐòʵÀý¼°º¯ÊýÆÊÎö

¡¡¡¡¡¡¡¡ºÃÁË£¬ÓÐÁËÉÏÃæµÄ¹¤¾ß£¬ÏÂÃæÎÒÃǾÍÀ´Ð´Ò»¸öServer Push³ÌÐòÀ´ËµÃ÷ËüµÄʵÏÖ¹ý³Ì£º
¡¡¡¡
¡¡¡¡¡¡¡¡££!/usr/bin/perl
¡¡¡¡
¡¡¡¡¡¡¡¡use CGI qw/:push £­nph/;
¡¡¡¡
¡¡¡¡¡¡¡¡¡ç| = 1;
¡¡¡¡
¡¡¡¡¡¡¡¡print multipart--init(£­boundary=¡µ¡ä£­£­boundary¡ä);
¡¡¡¡
¡¡¡¡¡¡¡¡while (1) {
¡¡¡¡
¡¡¡¡¡¡¡¡print multipart--start(£­type=¡µ¡ätext/plain¡ä),
¡¡¡¡
¡¡¡¡¡¡¡¡¡åThe current time is ¡å,scalar(localtime),¡å\n¡å,
¡¡¡¡
¡¡¡¡¡¡¡¡multipart--end;
¡¡¡¡
¡¡¡¡¡¡¡¡sleep 1;
¡¡¡¡
¡¡¡¡¡¡¡¡}
¡¡¡¡
¡¡¡¡¡¡¡¡³ÌÐòµÚ¶þÐиæËßCGI½âÊͳÌÐòÀ´µ÷ÓÃÖ§³ÖServer Push µÄ¹¦ÄÜÄ£¿é(CGI.PM)£¬ÔÚÕâ¸öÄ£¿éÖÐÔ¤Ïȶ¨ÒåÁËÈý¸öº¯Êý£ºmultipart--init()¡¢multipart--start()ºÍmultipart--end£¬Ö»ÒªÔÚ³ÌÐòÖÐÓÐuse CGI qw/:push £­nph/ÉùÃ÷£¬¾Í¿ÉÒÔÖ±½ÓʹÓÃÕâÈý¸öº¯Êý¡£
¡¡¡¡
¡¡¡¡¡¡¡¡multipart--init()º¯ÊýµÄ×÷ÓÃÊÇÉùÃ÷Ò»¸öÎĵµÀàÐÍ£¬¾ÍÏñÆÕͨµÄCGI³ÌÐòÖеġ°Content£­Type: text/html¡±ÉùÃ÷£¬¸æËß·þÎñÆ÷ÏÂÃæ´«Ë͵ÄÊÇHTMLÎĵµ£¬¶ømultipart--init()ÕâÒ»º¯ÊýÉùÃ÷µÄÎļþÀàÐÍÈ´ÊÇʵÏÖServer Push×î¸ù±¾µÄ·½·¨ÀàÐÍ£º
¡¡¡¡
¡¡¡¡¡¡¡¡Content£­Type: multipart/x£­mixed£­replace; boundary=¡ä£­£­boundary¡ä
¡¡¡¡
¡¡¡¡¡¡¡¡Èç¹ûÄã¶ÔHTTPµÄMIMEÀàÐÍÓÐÏêϸµÄÁ˽⣬Äã¾ÍÖªµÀmultipart ÀàÐÍÊÇÒ»ÖÖ¸´ºÏÀàÐÍ£¬ËüµÄ×ÓÀàÐÍÊÇmixed£¬×ÓÀàÐ͵ÄX²ÎÊý£¬´ó¼Ò¿ÉÒԲο´ÏêϸµÄMIMEÀàÐÍ˵Ã÷£¬ÕâÀï×î¹Ø¼üµÄÊÇreplace·½·¨£¬Ëü²»Í£µØÓÃнÓÊÕµÄÊý¾Ý¸üоɵÄÊý¾Ý£¬Õâ¾ÍÊÇ Server Push×î´óµÄ¼¼ÊõÄÚº­¡£boundaryÖ»ÊÇÒ»¸ö±ß½çÖµ£¬¸æËßä¯ÀÀÆ÷´ÓÕâ¶ù¿ªÊ¼£¬Ê¹ÓÃServer Push·½·¨ÁË¡£ÆäʵÄãÍêÈ«¿ÉÒÔÕâÑùÀí½â£¬Ö»ÒªÔڽű¾³ÌÐòÖÐÉùÃ÷ÁËÈçmultipart/x£­mixed£­replace ÕâÑùÒ»¸öÎĵµÀàÐÍ£¬·þÎñÆ÷¾ÍºÍ¿Í»§»ú½¨Á¢ÁËÒ»¸öÌرðµÄÁ¬½Ó¡£·þÎñÆ÷¾Í²»¶ÏµØ°Ñ¿Í»§»úÇëÇóµÄÊý¾ÝÔ´Ô´²»¶ÏµØÍÆÏòÁË¿Í»§»ú¡£¶ø´«Í³µÄ Client PULL·½·¨ÔòÊÇ£º
¡¡¡¡
¡¡¡¡¡¡¡¡1.Client ºÍServer½¨Á¢Á¬½Ó
¡¡¡¡
¡¡¡¡¡¡¡¡2.Client·¢ËÍÇëÇóµ½Server
¡¡¡¡
¡¡¡¡¡¡¡¡3.ServerÏìÓ¦ÇëÇó
¡¡¡¡
¡¡¡¡¡¡¡¡4.Server ¶Ï¿ªÁ¬½ÓÒÔÏìÓ¦ÏÂÒ»ÇëÇó¡£
¡¡¡¡
¡¡¡¡¡¡¡¡Í¨¹ýÕâÁ½ÖÖ·½·¨µÄ±È½Ï£¬´ó¼Ò¿ÉÒÔ¿´³öServer PushÓŵãÖ÷ÒªÔÚÓÚ·þÎñÆ÷ºÍ¿Í»§»úÖ®¼äÕâÖÖ²»¼ä¶ÏµÄÁ¬½Ó·½Ê½£¬Ê¹Ëü²»ÐèÒª²ÉÓÃClient PULLµÄ¡´META http£­equiv=refresh content=¡ån¡å¡µÕâÖÖ·½·¨À´Ë¢ÐÂÒ³Ã棬²»½ö¸üÐÂËٶȿ죬¶øÇÒ²»»á²úÉúÉÁ¶¯Ð§¹û¡£
¡¡¡¡
¡¡¡¡¡¡¡¡Èç¹ûÄã²»ÓÃmultipart--init()¶øÖ±½ÓÔڽű¾³ÌÐòÖÐÓÃÒÔÏÂÓï¾äÒ²¿ÉÒԴﵽͬÑùÄ¿µÄ£ºprint ¡åContent£­Type: multipart/x£­mixed£­replace; boundary=¡äboundary¡ä\n\n¡å¡£µ±ÏµÍ³²»Ö§³Ömultipart--init()º¯Êýʱ£¬¾Í¿ÉÒÔÖ±½ÓÕâÑùÉùÃ÷¡£

¡¡¡¡¡¡¡¡multipart--start() Õâ¸öº¯ÊýÊÇΪ·þÎñÆ÷Ö¸¶¨ÁË´«ËÍÒ»¸öÈ·¶¨µÄÎĵµ£¬Èç¹û²»ÓÃÕâ¸öº¯Êý£¬¸ù¾Ý½Å±¾³ÌÐòµÄÄÚÈÝ·þÎñÆ÷¿ÉÒÔÖ±½Ó°ÑÖ¸¶¨Êý¾Ý´«Ë͸ø¿Í»§»ú£¬µ±È»¿Í»§»ú²»ÄÜʶ±ðÕâÖÖÀàÐ͵ÄÎĵµ¿ÉÒÔºöÂÔ¶ø²»»á²úÉú´íÎó¡£µ«Èç¹ûÄãÖ¸Ã÷Á˾ßÌåµÄÎĵµÀàÐÍ£¬ÈçÀý³ÌÖеÄtext/plain(´¿Îı¾ÀàÐÍ)£¬¿Í»§»ú¾Í²»ÔÙ¶ÔÎĵµ¼ÓÒÔ·ÖÎö£¬´Ó¶øÌá¸ßÁË´¦ÀíËٶȣ¬·ñÔò¿Í»§»úÖ»ÖªµÀ´«Ë͹ýÀ´µÄÊÇ multipart(¸´ºÏÐÍ)¶øÒªÖØжÔÆä·ÖÎö¡£¡¡¡¡
¡¡¡¡
¡¡¡¡¡¡¡¡ÖÁÓÚmultipart--endº¯Êý²»Ðè×÷Ïêϸ˵Ã÷£¬Ö»ÊÇ˵Ã÷ÁËÒ»¸ö Push¹ý³ÌµÄ½áÊø¡£¡¡¡¡
¡¡¡¡
¡¡¡¡¡¡¡¡ÎªÁËʹ´ó¼ÒÄܸüºÃµØÀí½âÕâÈý¸öº¯ÊýÏêϸµÄ¼¼ÊõÄÚÈÝ£¬±ÊÕß°ÑÕâÈý¸öº¯ÊýµÄʵÏÖ¹ý³Ì½éÉܸø´ó¼Ò£º
¡¡¡¡
¡¡¡¡¡¡¡¡sub multipart--init {
¡¡¡¡
¡¡¡¡¡¡¡¡my(¡çself,@p) = self--or--default(@--);
¡¡¡¡
¡¡¡¡¡¡¡¡my(¡çboundary,@other) = ¡çself£­¡µrearrange([BOUNDARY],@p);
¡¡¡¡
¡¡¡¡¡¡¡¡¡çboundary = ¡çboundary || ¡ä£­£­£­£­£­£­£­ =--aaaaaaaaaa0¡ä;
¡¡¡¡
¡¡¡¡¡¡¡¡¡çself£­¡µ{¡äseparator¡ä} = ¡å\n£­£­¡çboundary\n¡å;
¡¡¡¡
¡¡¡¡¡¡¡¡¡çtype = Server--Push(¡çboundary);
¡¡¡¡
¡¡¡¡¡¡¡¡return ¡çself£­¡µheader(
¡¡¡¡
¡¡¡¡¡¡¡¡£­nph =¡µ 1,
¡¡¡¡
¡¡¡¡¡¡¡¡£­type =¡µ ¡çtype,
¡¡¡¡
¡¡¡¡¡¡¡¡(map { split ¡å=¡å, ¡ç--, 2 } @other),
¡¡¡¡
¡¡¡¡¡¡¡¡) . ¡çself£­¡µmultipart--end;
¡¡¡¡
¡¡¡¡¡¡¡¡}
¡¡¡¡
¡¡¡¡¡¡¡¡sub multipart--start {
¡¡¡¡
¡¡¡¡¡¡¡¡my(¡çself,@p) = self--or--default(@--);
¡¡¡¡
¡¡¡¡¡¡¡¡my(¡çtype,@other) = ¡çself£­¡µrearrange([TYPE],@p);
¡¡¡¡
¡¡¡¡¡¡¡¡¡çtype = ¡çtype || ¡ätext/html¡ä;
¡¡¡¡
¡¡¡¡¡¡¡¡return ¡çself£­¡µheader(
¡¡¡¡
¡¡¡¡¡¡¡¡£­type =¡µ ¡çtype,
¡¡¡¡
¡¡¡¡¡¡¡¡(map { split ¡å=¡å, ¡ç--, 2 } @other),
¡¡¡¡
¡¡¡¡¡¡¡¡);
¡¡¡¡
¡¡¡¡¡¡¡¡}
¡¡¡¡
¡¡¡¡¡¡¡¡sub multipart--end {
¡¡¡¡
¡¡¡¡¡¡¡¡my(¡çself,@p) = self--or--default(@--);
¡¡¡¡
¡¡¡¡¡¡¡¡return ¡çself£­¡µ{¡äseparator¡ä};
¡¡¡¡
¡¡¡¡¡¡¡¡}
¡¡¡¡
¡¡¡¡¡¡¡¡Èý¡¢Ó¦Óü¼ÇÉ
¡¡¡¡
¡¡¡¡¡¡¡¡Ê¹ÓÃServer PushµÄÆäËü¼¼ÇÉ£¬ÏÞÓÚƪ·ù£¬±ÊÕß²»ÔÙ×÷¹ý¶àµÄ½éÉÜ¡£²»¹ýÓÐʱÓÉÓÚ¿Í»§»úÔÚÒ»¶Îʱ¼äÄÚûÓжԷþÎñÆ÷·¢ÉúÇëÇó£¬Ò²¾ÍÊÇÈôÒ»¶Îʱ¼äÄÚûÓÐеÄÄÚÈÝÏòä¯ÀÀÆ÷ÊäÈ룬¿ÉÄÜ·¢ÉúÁ¬½Ó³¬Ê±ÏÖÏó£¬ÓÃÏÂÃæµÄ³ÌÐòÀ´´¦ÀíһϾÍÄܺܺõؽâ¾ö£º
¡¡¡¡
¡¡¡¡¡¡¡¡¡çmessage=1;
¡¡¡¡
¡¡¡¡¡¡¡¡¡çwhilecount=1;
¡¡¡¡
¡¡¡¡¡¡¡¡do {
¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡Ö÷³ÌÐò;
¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡çmessage£«£«;
¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡}
¡¡¡¡
¡¡¡¡¡¡¡¡if (¡çwhilecount == 30)
¡¡¡¡
¡¡¡¡¡¡¡¡{
¡¡¡¡
¡¡¡¡¡¡¡¡print ¡å¡´SCRIPT¡µ¡çmessage¡´/SCRIPT¡µ\015\012¡å;
¡¡¡¡
¡¡¡¡¡¡¡¡¡çwhilecount = 0;
¡¡¡¡
¡¡¡¡¡¡¡¡}
¡¡¡¡
¡¡¡¡¡¡¡¡¡çwhilecount£«£«;
¡¡¡¡
¡¡¡¡¡¡¡¡sleep 1;
¡¡¡¡
¡¡¡¡¡¡¡¡ÕâÖÖ¼¼ÇÉ´ó¼ÒÒ»¿´¾ÍÃ÷°×ÁË£¬ÕýÈçºÜ¶à FTPÈí¼þµÄLoopÒ»Ñù£¬ÔÚ¿ÕÏÐʱ·¢Ò»¸ö¿ÕÐźţ¬²»ÈóÌÐò½øÈëµÈ´ý״̬¡£Õâ¶Î³ÌÐòÿ¹ý30Ãë¾Í¸ø¿Í»§»úÊä³öÒ»ÐС´SCRIPT¡µ¡çmessage¡´/SCRIPT¡µ£¬¶ø¡çmessageÊÇÊýÖµ1¡¢2¡¢3µÈ£¬ÕâÒ»ÐÐÔÚä¯ÀÀÆ÷ä¯ÀÀʱ²¢²»ÏÔʾÈκÎÄÚÈÝ£¬ÈÃä¯ÀÀÕ߸оõ²»µ½¡£
ÎÄÕÂÆÀÂÛ

¹²ÓÐ 2 ÌõÆÀÂÛ

  1. lcy3382381 ÓÚ 2006-07-24 00:00:12·¢±í:

    ¸Ð¾õ»¹²»´í¡£ÄÇллÁË

  2. phpjava ÓÚ 2006-07-23 18:53:30·¢±í:

    ·¹ý