libscgi рд╕рд░рд▓ рдФрд░ рддреЗрдЬрд╝ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рднрд╛рд╡реА рдЙрдкрд╛рдп рд╣реИ

рдПрдХ рд╕рд░рд▓ рд╣рд▓реНрдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдХреНрд╕рд░ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдмрд╣реБрдд рдЬрд▓реНрджреА рд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдФрд░ AJAX рддрдХрдиреАрдХ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд╕рд╛рде, рдпрд╣ рдФрд░ рднреА рдЕрдзрд┐рдХ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реЛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдПрдХ рд╕реНрд╡рдд: рдкреВрд░реНрдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ, рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЦреЛрдЬ рд╕реНрдХреНрд░рд┐рдкреНрдЯ, рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕реЗ рд╕реВрдЪрдирд╛ рдЖрдЙрдЯрдкреБрдЯ рдХреА рддрд░рд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдкрд╣рд▓реЗ cgi рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ред рднрд╛рд░реА рднрд╛рд░ рдХреЗ рддрд╣рдд, рд╡реЗ рдмрд╣реБрдд рдкреНрд░рднрд╛рд╡реА рдирд╣реАрдВ рдереЗ рдФрд░ fcgi рдФрд░ scgi рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдП рдЧрдП рдереЗред рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ scgi рд╕рд░реНрд╡рд░ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд╛рдлреА рдЕрдзрд┐рдХ рд╣реИ (1500 bps / sec рд╕реЗ рдЕрдзрд┐рдХ) рдФрд░ рдореЗрдореЛрд░реА рдХреЗрд╡рд▓ 600K рд▓реЗрддрд╛ рд╣реИред



рд╕рд┐рдВрдкрд▓ рдХреЙрдорди рдЧреЗрдЯрд╡реЗ рдЗрдВрдЯрд░рдлреЗрд╕ (SCGI) рд╡реЗрдм (http) рд╕рд░реНрд╡рд░реЛрдВ рдХреЗ рд╕рд╛рде рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреА рдкрд╛рд░рд╕реНрдкрд░рд┐рдХ рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╣реИред рдЕрдзрд┐рдХрд╛рдВрд╢ рдЖрдзреБрдирд┐рдХ WEB рд╕рд░реНрд╡рд░ (Apache / nginx / lighttpd) рдореЗрдВ рдЕрдВрддрд░реНрдирд┐рд░реНрдорд┐рдд scgi рд╕рдорд░реНрдерди рд╣реИред рдиреАрдЪреЗ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╡рд┐рд╡рд░рдг рд╣реИ, рдЬреЛ рдПрдХ рд╕реНрдХреЛрдЧреА рд╕рд░реНрд╡рд░ рд╣реИред



рдпрд╣рд╛рдВ рдХреЗ рд╕реВрддреНрд░



рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рд╡рд┐рд╡рд░рдгред


рдХреНрд▓рд╛рдЗрдВрдЯ рдПрдХ рд╕реНрдЯреНрд░реАрдо рдЯреНрд░рд╛рдВрд╕рдлрд░ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ SCGI рд╕рд░реНрд╡рд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ 8-рдмрд┐рдЯ рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рд╣рд╕реНрддрд╛рдВрддрд░рдг рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдПрдХ рдЕрдиреБрд░реЛрдз рдореЗрдВ рдХрдИ рд╣реЗрдбрд░ рдФрд░ рдПрдХ рдЕрдиреБрд░реЛрдз рдирд┐рдХрд╛рдп (POST DATA) рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдЕрдиреБрд░реЛрдз рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЯреЗрдореНрдкрд▓реЗрдЯ рд╣реИрдВ: [len header]: \r\n

[header parm name] \0 [header parm value] \0 \r\n

[header parm name] \0 [header parm value] \0 \r\n

...

,\r\n

[POST DATA]




[len header]: \r\n

[header parm name] \0 [header parm value] \0 \r\n

[header parm name] \0 [header parm value] \0 \r\n

...

,\r\n

[POST DATA]








рдкрд╣рд▓реЗ рд╢реАрд░реНрд╖рд▓реЗрдЦ рдореЗрдВ "CONTENT_LENGTH" рдирд╛рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рд╕рдВрджреЗрд╢ рдмреЙрдбреА рдХреА рд▓рдВрдмрд╛рдИ (рджрд╢рдорд▓рд╡ рдореЗрдВ) рдХреЛ рдЗрд╕рдХреЗ рдореВрд▓реНрдп рдореЗрдВ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣реЗрдбрд░ "CONTENT_LENGTH" рдХреЛ рд╣рдореЗрд╢рд╛ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рднрд▓реЗ рд╣реА рдЗрд╕рдХрд╛ рдореВрд▓реНрдп 0 рд╣реЛ (рд╕рднреА GET рдЕрдиреБрд░реЛрдз)ред рд╣реЗрдбрд░ рдФрд░ рдЕрдиреБрд░реЛрдз рдирд┐рдХрд╛рдп рдХреЗ рдмреАрдЪ рдПрдХ рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо рдФрд░ рд▓рд╛рдЗрди рдлрд╝реАрдб рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдмреЙрдбреА (POST / PUT рдбреЗрдЯрд╛) рд╣реЗрдбрд░ рдХреЗ рд▓рд┐рдП рднреЗрдЬреА рдЬрд╛рддреА рд╣реИ рдФрд░ рдЗрд╕рдХреА рд▓рдВрдмрд╛рдИ "CONTENT_LENGTH" рд╢реАрд░реНрд╖рдХ рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред



Nginx рд╕реЗрдЯрдЕрдк

рдореИрдиреБрдЕрд▓ рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ WEB рд╕рд░реНрд╡рд░ рдХреЛ рдПрдХ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рде рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдореИрдВрдиреЗ рдЕрдкрдиреЗ scgi рд╕рд░реНрд╡рд░ рдХреЛ nginx рдХреЗ рддрд╣рдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рд╣реИред

рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реНрдерд╛рди рдХреЗ рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдг рд╡рд┐рдиреНрдпрд╛рд╕, рдкреЛрд░реНрдЯ 8080ред

location /dictionary {

scgi_pass localhost:8080;

include scgi_params;

}






рдЖрдВрддрд░рд┐рдХ рдЙрдкрдХрд░рдг scgi рд╕рд░реНрд╡рд░ рдФрд░ рдЙрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ


рд╕рд░реНрд╡рд░ libevent рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП url (DOCUMENT_URI рд╣реИрдбрд░) рдХрд╛ рдЕрдкрдирд╛ рд╣реИрдВрдбрд▓рд░ рд╣реИред

scgi.addHandler("/post", reinterpret_cast<IScgiHandler *>(new Handler1()));







рдкреНрд░рддреНрдпреЗрдХ рдХрд╕реНрдЯрдо рд╣реИрдВрдбрд▓рд░ рдХреЛ IScgiHandler рд╢реНрд░реЗрдгреА рдХреЗ рдЗрдирд╣реЗрд░рд┐рдЯрд░ рдХреЗ рд░рди () рдкрджреНрдзрддрд┐ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреИрд░рд╛рдореАрдЯрд░ рджрд┐рдП рдЧрдП рд╣реИрдВ:

map< string,string > * parms - ,

char * buffUot - .







рд╕рднреА рдкреНрд░рд╛рдкреНрдд POST рдбреЗрдЯрд╛ рдХреЛ рдХреБрдВрдЬреА "POST_DATA" рдХреЗ рд╕рд╛рде рдкрд╛рд░реНрдореНрд╕ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╕рдВрд░рдХреНрд╖рд┐рдд рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрдирдкреБрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ: getParam (string parnName, map <string, string> * parms);



рдПрдХ рдирдореВрдирд╛ рд╣реИрдВрдбрд▓рд░ рдХреЛрдб рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:



  1. class Handler1 : public IScgiHandler { void run ( map < string,string > * parms, char * buffUot ) { string parm = getParam ( "REQUEST_METHOD" ,parms ) ; // POST if ( parm == "POST" ) { // WEB-client POST strcpy ( buffUot, getParam ( "POST_DATA" ,parms ) . c_str ( ) ) ; return ; } // WEB-client QUERY_STRING strcpy ( buffUot, getParam ( "QUERY_STRING" ,parms ) . c_str ( ) ) ; } } ;



  2. class Handler1 : public IScgiHandler { void run ( map < string,string > * parms, char * buffUot ) { string parm = getParam ( "REQUEST_METHOD" ,parms ) ; // POST if ( parm == "POST" ) { // WEB-client POST strcpy ( buffUot, getParam ( "POST_DATA" ,parms ) . c_str ( ) ) ; return ; } // WEB-client QUERY_STRING strcpy ( buffUot, getParam ( "QUERY_STRING" ,parms ) . c_str ( ) ) ; } } ;



  3. class Handler1 : public IScgiHandler { void run ( map < string,string > * parms, char * buffUot ) { string parm = getParam ( "REQUEST_METHOD" ,parms ) ; // POST if ( parm == "POST" ) { // WEB-client POST strcpy ( buffUot, getParam ( "POST_DATA" ,parms ) . c_str ( ) ) ; return ; } // WEB-client QUERY_STRING strcpy ( buffUot, getParam ( "QUERY_STRING" ,parms ) . c_str ( ) ) ; } } ;



  4. class Handler1 : public IScgiHandler { void run ( map < string,string > * parms, char * buffUot ) { string parm = getParam ( "REQUEST_METHOD" ,parms ) ; // POST if ( parm == "POST" ) { // WEB-client POST strcpy ( buffUot, getParam ( "POST_DATA" ,parms ) . c_str ( ) ) ; return ; } // WEB-client QUERY_STRING strcpy ( buffUot, getParam ( "QUERY_STRING" ,parms ) . c_str ( ) ) ; } } ;



  5. class Handler1 : public IScgiHandler { void run ( map < string,string > * parms, char * buffUot ) { string parm = getParam ( "REQUEST_METHOD" ,parms ) ; // POST if ( parm == "POST" ) { // WEB-client POST strcpy ( buffUot, getParam ( "POST_DATA" ,parms ) . c_str ( ) ) ; return ; } // WEB-client QUERY_STRING strcpy ( buffUot, getParam ( "QUERY_STRING" ,parms ) . c_str ( ) ) ; } } ;



  6. class Handler1 : public IScgiHandler { void run ( map < string,string > * parms, char * buffUot ) { string parm = getParam ( "REQUEST_METHOD" ,parms ) ; // POST if ( parm == "POST" ) { // WEB-client POST strcpy ( buffUot, getParam ( "POST_DATA" ,parms ) . c_str ( ) ) ; return ; } // WEB-client QUERY_STRING strcpy ( buffUot, getParam ( "QUERY_STRING" ,parms ) . c_str ( ) ) ; } } ;



  7. class Handler1 : public IScgiHandler { void run ( map < string,string > * parms, char * buffUot ) { string parm = getParam ( "REQUEST_METHOD" ,parms ) ; // POST if ( parm == "POST" ) { // WEB-client POST strcpy ( buffUot, getParam ( "POST_DATA" ,parms ) . c_str ( ) ) ; return ; } // WEB-client QUERY_STRING strcpy ( buffUot, getParam ( "QUERY_STRING" ,parms ) . c_str ( ) ) ; } } ;



  8. class Handler1 : public IScgiHandler { void run ( map < string,string > * parms, char * buffUot ) { string parm = getParam ( "REQUEST_METHOD" ,parms ) ; // POST if ( parm == "POST" ) { // WEB-client POST strcpy ( buffUot, getParam ( "POST_DATA" ,parms ) . c_str ( ) ) ; return ; } // WEB-client QUERY_STRING strcpy ( buffUot, getParam ( "QUERY_STRING" ,parms ) . c_str ( ) ) ; } } ;



  9. class Handler1 : public IScgiHandler { void run ( map < string,string > * parms, char * buffUot ) { string parm = getParam ( "REQUEST_METHOD" ,parms ) ; // POST if ( parm == "POST" ) { // WEB-client POST strcpy ( buffUot, getParam ( "POST_DATA" ,parms ) . c_str ( ) ) ; return ; } // WEB-client QUERY_STRING strcpy ( buffUot, getParam ( "QUERY_STRING" ,parms ) . c_str ( ) ) ; } } ;



  10. class Handler1 : public IScgiHandler { void run ( map < string,string > * parms, char * buffUot ) { string parm = getParam ( "REQUEST_METHOD" ,parms ) ; // POST if ( parm == "POST" ) { // WEB-client POST strcpy ( buffUot, getParam ( "POST_DATA" ,parms ) . c_str ( ) ) ; return ; } // WEB-client QUERY_STRING strcpy ( buffUot, getParam ( "QUERY_STRING" ,parms ) . c_str ( ) ) ; } } ;



  11. class Handler1 : public IScgiHandler { void run ( map < string,string > * parms, char * buffUot ) { string parm = getParam ( "REQUEST_METHOD" ,parms ) ; // POST if ( parm == "POST" ) { // WEB-client POST strcpy ( buffUot, getParam ( "POST_DATA" ,parms ) . c_str ( ) ) ; return ; } // WEB-client QUERY_STRING strcpy ( buffUot, getParam ( "QUERY_STRING" ,parms ) . c_str ( ) ) ; } } ;



  12. class Handler1 : public IScgiHandler { void run ( map < string,string > * parms, char * buffUot ) { string parm = getParam ( "REQUEST_METHOD" ,parms ) ; // POST if ( parm == "POST" ) { // WEB-client POST strcpy ( buffUot, getParam ( "POST_DATA" ,parms ) . c_str ( ) ) ; return ; } // WEB-client QUERY_STRING strcpy ( buffUot, getParam ( "QUERY_STRING" ,parms ) . c_str ( ) ) ; } } ;



  13. class Handler1 : public IScgiHandler { void run ( map < string,string > * parms, char * buffUot ) { string parm = getParam ( "REQUEST_METHOD" ,parms ) ; // POST if ( parm == "POST" ) { // WEB-client POST strcpy ( buffUot, getParam ( "POST_DATA" ,parms ) . c_str ( ) ) ; return ; } // WEB-client QUERY_STRING strcpy ( buffUot, getParam ( "QUERY_STRING" ,parms ) . c_str ( ) ) ; } } ;







рд╕рд░реНрд╡рд░ рд╢реБрд░реВ рдХрд░рдирд╛ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ:

  1. // scgiServer scgi ; // pid_t pid ; if ( ( pid = scgi. demonize ( ) ) < 1 ) { if ( pid == - 1 ) { cerr << "demonize error \n " ; return 1 ; } return 0 ; } // if ( scgi. init ( "127.0.0.1" , 8080 ) ) { cerr << "server stopped \n " ; return 1 ; } // scgi. addHandler ( "/post" , reinterpret_cast < IScgiHandler * > ( new Handler1 ( ) ) ) ; scgi. addHandler ( "/xxx" , reinterpret_cast < IScgiHandler * > ( new Handler2 ( ) ) ) ; scgi. run ( ) ;



  2. // scgiServer scgi ; // pid_t pid ; if ( ( pid = scgi. demonize ( ) ) < 1 ) { if ( pid == - 1 ) { cerr << "demonize error \n " ; return 1 ; } return 0 ; } // if ( scgi. init ( "127.0.0.1" , 8080 ) ) { cerr << "server stopped \n " ; return 1 ; } // scgi. addHandler ( "/post" , reinterpret_cast < IScgiHandler * > ( new Handler1 ( ) ) ) ; scgi. addHandler ( "/xxx" , reinterpret_cast < IScgiHandler * > ( new Handler2 ( ) ) ) ; scgi. run ( ) ;



  3. // scgiServer scgi ; // pid_t pid ; if ( ( pid = scgi. demonize ( ) ) < 1 ) { if ( pid == - 1 ) { cerr << "demonize error \n " ; return 1 ; } return 0 ; } // if ( scgi. init ( "127.0.0.1" , 8080 ) ) { cerr << "server stopped \n " ; return 1 ; } // scgi. addHandler ( "/post" , reinterpret_cast < IScgiHandler * > ( new Handler1 ( ) ) ) ; scgi. addHandler ( "/xxx" , reinterpret_cast < IScgiHandler * > ( new Handler2 ( ) ) ) ; scgi. run ( ) ;



  4. // scgiServer scgi ; // pid_t pid ; if ( ( pid = scgi. demonize ( ) ) < 1 ) { if ( pid == - 1 ) { cerr << "demonize error \n " ; return 1 ; } return 0 ; } // if ( scgi. init ( "127.0.0.1" , 8080 ) ) { cerr << "server stopped \n " ; return 1 ; } // scgi. addHandler ( "/post" , reinterpret_cast < IScgiHandler * > ( new Handler1 ( ) ) ) ; scgi. addHandler ( "/xxx" , reinterpret_cast < IScgiHandler * > ( new Handler2 ( ) ) ) ; scgi. run ( ) ;



  5. // scgiServer scgi ; // pid_t pid ; if ( ( pid = scgi. demonize ( ) ) < 1 ) { if ( pid == - 1 ) { cerr << "demonize error \n " ; return 1 ; } return 0 ; } // if ( scgi. init ( "127.0.0.1" , 8080 ) ) { cerr << "server stopped \n " ; return 1 ; } // scgi. addHandler ( "/post" , reinterpret_cast < IScgiHandler * > ( new Handler1 ( ) ) ) ; scgi. addHandler ( "/xxx" , reinterpret_cast < IScgiHandler * > ( new Handler2 ( ) ) ) ; scgi. run ( ) ;



  6. // scgiServer scgi ; // pid_t pid ; if ( ( pid = scgi. demonize ( ) ) < 1 ) { if ( pid == - 1 ) { cerr << "demonize error \n " ; return 1 ; } return 0 ; } // if ( scgi. init ( "127.0.0.1" , 8080 ) ) { cerr << "server stopped \n " ; return 1 ; } // scgi. addHandler ( "/post" , reinterpret_cast < IScgiHandler * > ( new Handler1 ( ) ) ) ; scgi. addHandler ( "/xxx" , reinterpret_cast < IScgiHandler * > ( new Handler2 ( ) ) ) ; scgi. run ( ) ;



  7. // scgiServer scgi ; // pid_t pid ; if ( ( pid = scgi. demonize ( ) ) < 1 ) { if ( pid == - 1 ) { cerr << "demonize error \n " ; return 1 ; } return 0 ; } // if ( scgi. init ( "127.0.0.1" , 8080 ) ) { cerr << "server stopped \n " ; return 1 ; } // scgi. addHandler ( "/post" , reinterpret_cast < IScgiHandler * > ( new Handler1 ( ) ) ) ; scgi. addHandler ( "/xxx" , reinterpret_cast < IScgiHandler * > ( new Handler2 ( ) ) ) ; scgi. run ( ) ;



  8. // scgiServer scgi ; // pid_t pid ; if ( ( pid = scgi. demonize ( ) ) < 1 ) { if ( pid == - 1 ) { cerr << "demonize error \n " ; return 1 ; } return 0 ; } // if ( scgi. init ( "127.0.0.1" , 8080 ) ) { cerr << "server stopped \n " ; return 1 ; } // scgi. addHandler ( "/post" , reinterpret_cast < IScgiHandler * > ( new Handler1 ( ) ) ) ; scgi. addHandler ( "/xxx" , reinterpret_cast < IScgiHandler * > ( new Handler2 ( ) ) ) ; scgi. run ( ) ;



  9. // scgiServer scgi ; // pid_t pid ; if ( ( pid = scgi. demonize ( ) ) < 1 ) { if ( pid == - 1 ) { cerr << "demonize error \n " ; return 1 ; } return 0 ; } // if ( scgi. init ( "127.0.0.1" , 8080 ) ) { cerr << "server stopped \n " ; return 1 ; } // scgi. addHandler ( "/post" , reinterpret_cast < IScgiHandler * > ( new Handler1 ( ) ) ) ; scgi. addHandler ( "/xxx" , reinterpret_cast < IScgiHandler * > ( new Handler2 ( ) ) ) ; scgi. run ( ) ;



  10. // scgiServer scgi ; // pid_t pid ; if ( ( pid = scgi. demonize ( ) ) < 1 ) { if ( pid == - 1 ) { cerr << "demonize error \n " ; return 1 ; } return 0 ; } // if ( scgi. init ( "127.0.0.1" , 8080 ) ) { cerr << "server stopped \n " ; return 1 ; } // scgi. addHandler ( "/post" , reinterpret_cast < IScgiHandler * > ( new Handler1 ( ) ) ) ; scgi. addHandler ( "/xxx" , reinterpret_cast < IScgiHandler * > ( new Handler2 ( ) ) ) ; scgi. run ( ) ;



  11. // scgiServer scgi ; // pid_t pid ; if ( ( pid = scgi. demonize ( ) ) < 1 ) { if ( pid == - 1 ) { cerr << "demonize error \n " ; return 1 ; } return 0 ; } // if ( scgi. init ( "127.0.0.1" , 8080 ) ) { cerr << "server stopped \n " ; return 1 ; } // scgi. addHandler ( "/post" , reinterpret_cast < IScgiHandler * > ( new Handler1 ( ) ) ) ; scgi. addHandler ( "/xxx" , reinterpret_cast < IScgiHandler * > ( new Handler2 ( ) ) ) ; scgi. run ( ) ;



  12. // scgiServer scgi ; // pid_t pid ; if ( ( pid = scgi. demonize ( ) ) < 1 ) { if ( pid == - 1 ) { cerr << "demonize error \n " ; return 1 ; } return 0 ; } // if ( scgi. init ( "127.0.0.1" , 8080 ) ) { cerr << "server stopped \n " ; return 1 ; } // scgi. addHandler ( "/post" , reinterpret_cast < IScgiHandler * > ( new Handler1 ( ) ) ) ; scgi. addHandler ( "/xxx" , reinterpret_cast < IScgiHandler * > ( new Handler2 ( ) ) ) ; scgi. run ( ) ;



  13. // scgiServer scgi ; // pid_t pid ; if ( ( pid = scgi. demonize ( ) ) < 1 ) { if ( pid == - 1 ) { cerr << "demonize error \n " ; return 1 ; } return 0 ; } // if ( scgi. init ( "127.0.0.1" , 8080 ) ) { cerr << "server stopped \n " ; return 1 ; } // scgi. addHandler ( "/post" , reinterpret_cast < IScgiHandler * > ( new Handler1 ( ) ) ) ; scgi. addHandler ( "/xxx" , reinterpret_cast < IScgiHandler * > ( new Handler2 ( ) ) ) ; scgi. run ( ) ;



  14. // scgiServer scgi ; // pid_t pid ; if ( ( pid = scgi. demonize ( ) ) < 1 ) { if ( pid == - 1 ) { cerr << "demonize error \n " ; return 1 ; } return 0 ; } // if ( scgi. init ( "127.0.0.1" , 8080 ) ) { cerr << "server stopped \n " ; return 1 ; } // scgi. addHandler ( "/post" , reinterpret_cast < IScgiHandler * > ( new Handler1 ( ) ) ) ; scgi. addHandler ( "/xxx" , reinterpret_cast < IScgiHandler * > ( new Handler2 ( ) ) ) ; scgi. run ( ) ;



  15. // scgiServer scgi ; // pid_t pid ; if ( ( pid = scgi. demonize ( ) ) < 1 ) { if ( pid == - 1 ) { cerr << "demonize error \n " ; return 1 ; } return 0 ; } // if ( scgi. init ( "127.0.0.1" , 8080 ) ) { cerr << "server stopped \n " ; return 1 ; } // scgi. addHandler ( "/post" , reinterpret_cast < IScgiHandler * > ( new Handler1 ( ) ) ) ; scgi. addHandler ( "/xxx" , reinterpret_cast < IScgiHandler * > ( new Handler2 ( ) ) ) ; scgi. run ( ) ;



  16. // scgiServer scgi ; // pid_t pid ; if ( ( pid = scgi. demonize ( ) ) < 1 ) { if ( pid == - 1 ) { cerr << "demonize error \n " ; return 1 ; } return 0 ; } // if ( scgi. init ( "127.0.0.1" , 8080 ) ) { cerr << "server stopped \n " ; return 1 ; } // scgi. addHandler ( "/post" , reinterpret_cast < IScgiHandler * > ( new Handler1 ( ) ) ) ; scgi. addHandler ( "/xxx" , reinterpret_cast < IScgiHandler * > ( new Handler2 ( ) ) ) ; scgi. run ( ) ;



  17. // scgiServer scgi ; // pid_t pid ; if ( ( pid = scgi. demonize ( ) ) < 1 ) { if ( pid == - 1 ) { cerr << "demonize error \n " ; return 1 ; } return 0 ; } // if ( scgi. init ( "127.0.0.1" , 8080 ) ) { cerr << "server stopped \n " ; return 1 ; } // scgi. addHandler ( "/post" , reinterpret_cast < IScgiHandler * > ( new Handler1 ( ) ) ) ; scgi. addHandler ( "/xxx" , reinterpret_cast < IScgiHandler * > ( new Handler2 ( ) ) ) ; scgi. run ( ) ;



  18. // scgiServer scgi ; // pid_t pid ; if ( ( pid = scgi. demonize ( ) ) < 1 ) { if ( pid == - 1 ) { cerr << "demonize error \n " ; return 1 ; } return 0 ; } // if ( scgi. init ( "127.0.0.1" , 8080 ) ) { cerr << "server stopped \n " ; return 1 ; } // scgi. addHandler ( "/post" , reinterpret_cast < IScgiHandler * > ( new Handler1 ( ) ) ) ; scgi. addHandler ( "/xxx" , reinterpret_cast < IScgiHandler * > ( new Handler2 ( ) ) ) ; scgi. run ( ) ;



  19. // scgiServer scgi ; // pid_t pid ; if ( ( pid = scgi. demonize ( ) ) < 1 ) { if ( pid == - 1 ) { cerr << "demonize error \n " ; return 1 ; } return 0 ; } // if ( scgi. init ( "127.0.0.1" , 8080 ) ) { cerr << "server stopped \n " ; return 1 ; } // scgi. addHandler ( "/post" , reinterpret_cast < IScgiHandler * > ( new Handler1 ( ) ) ) ; scgi. addHandler ( "/xxx" , reinterpret_cast < IScgiHandler * > ( new Handler2 ( ) ) ) ; scgi. run ( ) ;



  20. // scgiServer scgi ; // pid_t pid ; if ( ( pid = scgi. demonize ( ) ) < 1 ) { if ( pid == - 1 ) { cerr << "demonize error \n " ; return 1 ; } return 0 ; } // if ( scgi. init ( "127.0.0.1" , 8080 ) ) { cerr << "server stopped \n " ; return 1 ; } // scgi. addHandler ( "/post" , reinterpret_cast < IScgiHandler * > ( new Handler1 ( ) ) ) ; scgi. addHandler ( "/xxx" , reinterpret_cast < IScgiHandler * > ( new Handler2 ( ) ) ) ; scgi. run ( ) ;







рд╕реНрдерд╛рдкрдирд╛


рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рд╕реНрдереИрддрд┐рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдХрд╛рдордЪрд▓рд╛рдК рдмрдирд╛рдирд╛ - рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕рдВрдХрд▓рди

рдПрдХ рдЙрджрд╛рд╣рд░рдг рдлрд╝рд╛рдЗрд▓ рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВ



рдЖрдкрдХреЗ рдЖрд╡реЗрджрди рдХрд╛ рд╕рдВрдХрд▓рди:

cp libscgi.a / usr / рд╕реНрдерд╛рдиреАрдп / рджреЗрдп

g ++ example.cpp -o scgi_server -Wall -g -L -L / usr / рд╕реНрдерд╛рдиреАрдп / lib -levent -lscgi



рдкреНрд░рддрд┐рдмрдВрдз:


POST рдбреЗрдЯрд╛ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рд▓рдВрдмрд╛рдИ 2K рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдкреНрд░рддрд┐рдмрдВрдз #define BUFFSIZE рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЗ рдЕрдиреБрд░реВрдк рдорд╛рди рд╕реЗрдЯ рдХрд░рдХреЗ рдФрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХреЗ рджреНрд╡рд╛рд░рд╛ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореЗрд░реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред

рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкреНрд░рд╛рдпреЛрдЧрд┐рдХ рд╣реИ, рдЦрд╛рдорд┐рдпрд╛рдВ рд╣реИрдВ рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд рдЦрд╛рдорд┐рдпрд╛рдВ рд╣реИрдВред рд░рдЪрдирд╛рддреНрдордХ рдЖрд▓реЛрдЪрдирд╛ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред рдпрд╣ рд╕рдм TODO рдореЗрдВ рдХрд┐рдП рдЬрд╛рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рд╣реИред рдЬреЛ рд▓реЛрдЧ рд╡рд┐рдХрд╛рд╕ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдФрд░ рдорджрдж рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЙрдирдХрд╛ рд╣рдореЗрд╢рд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред



All Articles