acl 3.0.22 °æ±¾·¢²¼ÁË£¬acl ÊÇ one advanced C/C++ library µÄ¼ò³Æ£¬Ö÷Òª°üÀ¨ÍøÂçͨÐÅ¿âÒÔ¼°·þÎñÆ÷¿ò¼Ü¿âµÈ¹¦ÄÜ£¬Ö§³Ö Linux/Windows/Solaris/FreeBsd/MacOS ƽ̨£»Õû¸ö acl ÏîÄ¿Ö÷Òª°üº¬Èý¸öº¯Êý¿â£ºlib_acl(´¿C¿ª·¢µÄ»ù´¡¿â£¬Ö÷Òª°üº¬ÍøÂçͨÐż°·þÎñÆ÷±à³Ì¿ò¼ÜÒÔ¼°ÆäËü·á¸»µÄ¹¦ÄÜ)¡¢lib_protocol(°üº¬ HTTP/PING/SMTP ͨÐÅÐÒéµÄCÓïÑÔʵÏÖ)¡¢lib_acl_cpp(»ùÓÚ lib_acl ¼° lib_protocol Á½¸öC¿â£¬ÌṩÁ˸üΪǿ´óµÄ±à³Ì½Ó¿Ú¼°·á¸»µÄ¹¦ÄÜÀà)£»±¾´Î acl Éý¼¶µÄÖ÷ÒªÄÚÈÝÓУº1¡¢SSL ͬʱ֧³Ö×èÈû¡¢·Ç×èÈûģʽ£¬2¡¢Ï̳߳طþÎñÆ÷Ä£°å¸üºÃµØÖ§³ÖÔÚÏ߸üУ¬3¡¢TCP ÅÉ·¢Æ÷ÌṩÁ˹ÜÀí½Ó¿ÚÓÃÓÚ״̬»ã±¨£¬4¡¢¹¤³ÌÎļþÕûÀí¡£
acl °üÀ¨ÒÔÏ·ḻµÄ³£Óú¯Êý¿â£º
1¡¢³£¼ûÍøÂçÓ¦Óÿ⣺ SMTP ¿Í»§¶Ë¿â/PING ¿â/memcache ¿Í»§¶Ë¿â/handlersocket ¿Í»§¶Ë¿â/beanstalk ¿Í»§¶Ë¿â
2¡¢HTTP ÍøÂç¿â£ºHTTP ¿Í»§¶Ë/·þÎñ¶Ë¿â£¬C++°æ HttpServlet À࣬HTTP COOKIE/HTTP SESSION µÈ
3¡¢Óʼþ½âÎö¿â£ºmime½âÎö¿â/RFC2047/RFC2048/mime base64/mime qp/mime uucode µÈ
4¡¢ÍøÂçͨÐſ⣺×èÈû/·Ç×èÈûÍøÂç IO ¿â(ÆäÖÐ lib_acl_cpp ¿âͨ¹ýǶÈë polarssl ¶ø¾ß±¸ÁË SSL µÄÄÜÁ¦)
5¡¢·þÎñÆ÷¿ò¼Ü£º°üÀ¨½ø³Ì³ØÄ£Ê½¡¢Ï̳߳ØÄ£Ê½¡¢·Ç×èÈûģʽ¡¢UDPͨÐÅģʽ¼°´¥·¢Æ÷ģʽ
6¡¢Ê¼þÒýÇæ£ºÖ§³Ö select¡¢poll(for unix)¡¢epoll(for linux)¡¢kqueue(for bsd)¡¢devpoll(for solaris)¡¢iocp(for win32)¡¢win32 ´°¿ÚÏûÏ¢(for win32£©Ê¼þÒýÇæ
7¡¢Í¨ÓÃÁ¬½Ó³Ø¿â£º¸ßЧµÄÁ¬½Ó³Ø»ù´¡Àà¿â£¬Ö§³Ö·á¸»µÄ¹¦ÄÜ
8¡¢Êý¾Ý¿â¿Í»§¶Ë¿â£º¶ÔÔÉúµÄÊý¾Ý¿â¿Í»§¶Ë¿â½øÐÐÁ˶þ´Î·â×°£¬Ê¹±à³Ì¸üΪ¼òÒ×£¬¹¦ÄܸüΪ·á¸»
9¡¢xml/json Á÷ʽ½âÎö¿â£ºÇø±ðÓÚÍøÉÏÆäËüÒÑÓÐµÄ xml/json ½âÎö¿â£¬acl ÖÐµÄ xml/json ½âÎö¿â²ÉÓÃÓÐÏÞ״̬»ú·½Ê½½âÎöÊý¾Ý£¬´¦Àí·½Ê½¸üΪÁé»î
Ò»¡¢»ù´¡ C ¿â£ºlib_acl
.ÐÂÌØÐÔ£ºjson Ä£¿éÔö¼ÓÁ˹¹Ôì²¼¶ûÐͺÍÊýÖµÐ͵ĽӿÚ
.ÐÂÌØÐÔ£ºÊ¼þÒýÇæÄ£¿é¿ÉÒÔÇø·Ö ACL_EVENT_ACCEPT/ACL_EVENT_CONNECT Óë ACL_EVENT_READ/ACL_EVENT_WRITE ʼþÀàÐÍ
.ÐÂÌØÐÔ£ºacl_json_util.c ÖÐÔö¼ÓÁËÁ÷ʽ½« JSON ¶ÔÏóתΪ×Ö·û´®µÄº¯Êý acl_json_building£¬ÕâÑùµ± JSON ¶ÔÏó±È½Ï´óʱʹÓøú¯Êý¿ÉÒÔÓÐЧ·ÀÖ¹ÒªÇóϵͳ·ÖÅä·Ç³£´óµÄÄÚ´æ¿Õ¼ä¶øµ¼Ö·ÖÅäÄÚ´æÊ§°Ü
.ÐÂÌØÐÔ£ºacl_pthread_pool.c ÖÐÔö¼ÓÁË acl_pthread_pool_idle£¬acl_pthread_pool_busy Á½¸öº¯Êý£¬·Ö±ðÓÃÀ´»ñµÃµ±Ç°Ï̳߳ØÖеĿÕÏÐÏß³ÌÊý¼°·±Ã¦Ïß³ÌÊý
.ÐÂÌØÐÔ: acl_threads_server.c ·þÎñÆ÷Ä£°åµ±×Ó½ø³ÌÍ˳öʱ»áÓÅÏȵ÷ÓÃÓ¦Óûص÷º¯Êý£¬ÓÉÓ¦Óûص÷º¯ÊýÓÅÏȾö¶¨ÊÇ·ñÍ˳ö
.ÐÂÌØÐÔ£ºacl_mystring.c ÖÐÔö¼ÓÁË acl_find_blank_line º¯Êý£¬ÓÃÀ´´Ó¸ø¶¨Êý¾ÝÖвéÕÒ¿ÕÐеÄλÖÃ
.ÐÂÌØÐÔ£ºacl_trace.c ÖÐÔö¼ÓÁË acl_log_strace() º¯ÊýÓÃÀ´½«º¯Êýµ÷ÓöÑÕ»Êä³öÖÁÈÕÖ¾ÎļþÖÐ
.ÐÂÌØÐÔ£ºacl_trace.c Öеĺ¯Êý acl_trace_info Ôö¼ÓÁË·ÀÖ¹µÝ¹éǶÌ׵ŦÄÜ
.ÐÂÌØÐÔ£ºacl_threads_server.c µ±²ÉÓà TCP Á¬½Ó·Ö·¢·½Ê½Ê±£¬Ôö¼ÓÁ˻㱨¸ø·Ö·¢Æ÷µÄÐÅÏ¢×ֶΣ¬ÒÔ±ãÓÚ·Ö·¢Æ÷¸ù¾ÝÕâЩ×ֶξö¶¨·Ö·¢µÄ²ßÂÔ
.ÐÂÌØÐÔ£ºacl_vstream.c ÖÐÑ»·Ð´º¯Êý(loop_writen)Ö§³Ö³¬Ê±Ð´¹¦ÄÜ
.ÐÂÌØÐÔ£ºacl_msg.c ÖÐµÄ acl_msg_error/warn/fatal/panic Ö§³Ö¼Ç¼º¯Êýµ÷ÓöÑÕ»
.ÐÔÄÜ£ºacl_vstream.c ÓÅ»¯Á˶Á (__sys_read) µÄÐÔÄÜ
.ÎÊÌâÐÞ¸´£º acl_json_util.c Öн« JSON ¶ÔÏóתΪ×Ö·û´®µÄº¯Êý acl_json_build ²»ÄÜÖ§³ÖijЩÇéÐÎ
.ÎÊÌâÐÞ¸´£ºacl_json_util.c Öеĺ¯Êý json_escape_append ²»Ó¦Õë¶Ô×Ö·û '/' ½øÐÐתÒå
.ÎÊÌâÐÞ¸´£ºacl_vstream.c ÔÚдʱÓпÉÄÜ»áÔì³ÉËÀÑ»·
.ÎÊÌâÐÞ¸´£ºacl_vstream.c Öк¯Êý __sys_read µÄ±ê־λ sys_read_ready Öà 0 Ó¦¸ÃÔÚ read_fn/fread_fn º¯Êý·µ»Øºó
.ÎÊÌâÐ޸ģºacl_aio_read.c ÖÐµÄ reactor IO ·½Ê½µÄº¯Êý acl_aio_enable_read ÄÚ²¿ÔÚijÖÖÇé¿öÏÂÓпÉÄܲ»»á´¥·¢¶Á»Øµ÷¹ý³Ì
.ÎÊÌâÐÞ¸´£ºacl_sys_socket.c ÖеĶÁ/д³¬Ê±²ÎÊý timeout ²»Æð×÷ÓÃ
.ÎÊÌâÐÞ¸´£ºacl_threads_server.c/acl_aio_server.c ·þÎñÆ÷Ä£°å£¬µ±²ÉÓà TCP ·Ö·¢·½Ê½Ê±£¬Èç¹û acl_master reload ºóÈô×Ó½ø³ÌÅäÖõIJ»ÊÇÁ¢¼´Í˳ö£¬Ôò¸Ã×Ó½ø³Ì»áÖØÊÔÁ¬½Ó TCP ÅÉ·¢Æ÷´Ó¶øµ¼Ö¸Ã×Ó½ø³ÌÓÀ²»»áÍ˳ö
.ÎÊÌâÐÞ¸´£ºsnprintf.c ÖÐ acl_secure_snprintf/acl_secure_vsnprintf ÔÚµ÷Óà _vsnprintf_s ʱÓÐÎ󣬵ÚÈý¸ö²ÎÊýÐè´«Èë _TRUNCATE£¬·ñÔòµ±»º³åÇø½ÏСʱ»á²úÉú¶ÏÑÔ
.ÎÊÌâÐÞ¸´£ºacl_threads_server.c ½«¶Ô¿Í»§¶Ë IP µØÖ··ÃÎÊȨÏ޵Ĵ¦Àí¹ý³Ì·ÅÔÚ client_wakeup ÖУ¬·ñÔò»áÔì³É master_threads2 Àà²úÉú core
.ÆäËü£ºÕûÀí¿âµÄËùÓÐÍ·Îļþ£¬Ê¹Ö®¸ü¹æ·¶
¶þ¡¢lib_protocol ¿â
.ÎÊÌâÐÞ¸´£º http_hdr_req.c Öеĺ¯Êý __strip_url_path ÈÔÈ»´æÔÚÎÊÌ⣬ÒòΪÊäÈëµÄÁ½¸ö²ÎÊýÓпÉÄÜÖ¸ÏòÏàͬµÄÄÚ´æµØÖ·£¬´Ó¶øµ¼Öµڶþ¸ö²ÎÊý±»¸³ '\0'£¬ËùÒÔÓ¦¸Ã°Ñ ACL_VSTRING_RESET/ACL_VSTRING_TERMINATE ·ÅÔÚ acl_argv_split Ö®ºó
.ÎÊÌâÐÞ¸´£ºhttp_hdr_req.c Öе±Öظ´Ê¹ÓÃÏֲ߳̾¿±äÁ¿Ê±µ÷Óà __hdr_reset À´ÖØÖÃÆäÖеÄһЩ²ÎÊý£¬ËäÈ»µ÷ÓÃÁË ACL_VSTRING_RESET£¬µ«¸Ãºê²¢²»»á½«»º³åÊý¾Ýβ²¿Öà 0£¬µ¼Ö¾ɵÄÊý¾Ý»á±»Öظ´Ê¹ÓÃ
ÎÊÌâÐÞ¸´£º proto_snprintf.c Öк¯Êý proto_secure_snprintf/proto_securevsnprintf ÔÚµ÷Óà _vsnprintf_s ʱµÚÈý¸ö²ÎÊýÓ¦¸ÃΪ _TRUNCATE£¬·ñÔòµ±»º³åÇø¸øµÄ±È½ÏСʱVCÌṩµÄ API ÄÚ²¿»á²úÉú¶ÏÑÔ
Èý¡¢lib_acl_cpp ¿â
.ÐÂÌØÐÔ£ºlocker ÀàÔö¼ÓÁË try_lock ·½·¨
.ÐÂÌØÐÔ£ºxml ÀàÔö¼ÓÁ˼¸¸ö·½·¨
.ÐÂÌØÐÔ£ºjson ÀàÔö¼ÓÁ˹¹Ôì²¼¶ûÐͺÍÊýÖµÐ͵ĽӿÚ
.ÐÂÌØÐÔ£ºstream_setup ÀàÏÖÔÚ¿ÉÒÔÖ§³Ö aio_stream ·Ç×èÈûÁ÷ÁË
.ÐÂÌØÐÔ£ºpolarssl_io ÀàÔö¼ÓÁËÖ§³Ö·Ç×èÈû IO µÄ·½·¨
.ÐÂÌØÐÔ£ºstring ÀàÔö¼ÓÁË find_blank_line/find_reset ·½·¨£¬ÓÃÀ´·½±ã´Óµ±Ç°»º³åÇøÖвéÕÒÒ»¸ö¿ÕÐеÄλÖÃ
.ÐÂÌØÐÔ£ºstring ÀàÔö¼ÓÁË substr ·½·¨£¬ÓÃÀ´´Óµ±Ç°»º³åÇøÖÐÌáÈ¡Êý¾Ý
.ÐÂÌØÐÔ£ºmaster_threads2 ÀàÔö¼ÓÁË proc_exit_timer Ð麯Êý£¬µ±×Ó½ø³ÌÐèÒªÍ˳öʱ·þÎñÆ÷Ä£°å½«»á»Øµ÷¸ÃÐ麯ÊýÒÔ¾ö¶¨×Ó½ø³ÌÊÇ·ñ¿ÉÒÔÍ˳ö
.ÐÂÌØÐÔ£ºmaster_threads2 ÀàÔö¼ÓÁË thread_on_handshake ·½·¨£¬µ±·þÎñ¶Ëµ÷ÓÃÍê thread_on_accept ºó¿ÉÒÔÔÚ×ÓÏß³ÌÖе÷Óà thread_on_handshake ·½·¨£¬ÒÔ´¦Àí½Ï³¤µÄÈÎÎñ
.ÎÊÌâÐÞ¸´£ºsnprintf.cpp Öк¯Êý snprintf/vsnprintf ÔÚµ÷Óà _vsnprintf_s ʱµÚÈý¸ö²ÎÊýÓ¦¸ÃΪ _TRUNCATE£¬·ñÔòµ±»º³åÇø¸øµÄ±È½ÏСʱVCÌṩµÄ API ÄÚ²¿»á²úÉú¶ÏÑÔ
.ÎÊÌâÐÞ¸´£ºfstream::open ·½·¨ÔÚ´ò¿ªÎļþʱÏȵ÷ÓûùÀà stream::open_stream£¬È»ºó»ùÀຯÊýÔÙµ÷Óà C ¿â acl_vstream_fdopen ʱûÓÐ˵Ã÷´ò¿ªÁ÷µÄÀàÐÍ£¬µ¼ÖÂÄÚ²¿Á÷¶ÔÏó ACL_VSTREAM µÄ¹Ø±Õ»Øµ÷º¯ÊýÉèÖÃÓÐÎó
.ÎÊÌâÐÞ¸´£ºhttp_response ÀàÖе±µ÷Óà read_header ·½·¨Ê±£¬ÐèÒª×Ô¶¯½« head_sent_ ÖÃΪ false£¬ÒÔ±ãÓÚͬһÁ¬½ÓµÄÏÂÒ»´Î»á»°Ê±¿ÉÒÔÕýÈ··¢ËÍ HTTP ÏìӦͷ
.ÎÊÌâÐÞ¸´£ºistream ÀàÖÐµÄ xxx_peek º¯ÊýÔÚ¶Á³ö´íʱûÓÐÅÐ¶Ï errno Ϊ ACL_EWOULDBLOCK µÄÇé¿ö£¬ÔÚ·Ç×èÈû·½Ê½Ï£¬µ±¶Á·µ»Ø -1 ÇÒ errno Ϊ ACL_EWOULDBLOCK ʱ²¢²»±íʾ¶Á³ö´í
.ÎÊÌâÐÞ¸´£ºpolarssl_io ÀàÔÚ·Ç×èÈûģʽÏÂÓпÉÄÜ»á×èÈûÔÚ IO ÉÏ
.ÐÂʾÀý£ºÔö¼ÓÁË json ²âÊÔÓÃÀý json/json7
.ÐÂʾÀý£ºÐ string/blank_line ʾÀý£¬ÓÃÀ´²âÊÔÉÏÃæÐÂÔöµÄ·½·¨
ËÄ¡¢²Î¿¼Á´½Ó£º
¼¼Êõ²©¿Í£ºhttp://zsxxsz.iteye.com/
download£ºhttp://sourceforge.net/projects/acl/
svn£ºsvn checkout svn://svn.code.sf.net/p/acl/code/trunk acl-code
github£ºhttps://github.com/zhengshuxin/acl
¹úÄÚ¾µÏñ(oschina git)£ºhttp://git.oschina.net/zsxxsz/acl
À´×Ô:¿ªÔ´ÖйúÉçÇø

