рд▓реЗрдЦ рдХрд╛ рд╡рд░реНрдгрди рд╣реИ:
- рд╕реЙрдХреЗрдЯ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдЕрд╡рд░реБрджреНрдз рдХрд░рдирд╛
- рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕реЙрдХреЗрдЯреНрд╕ рдФрд░ рд▓рд┐рдирдХреНрд╕ рдПрдкреЛрд▓ рдХреЗ рд▓рд╛рдн
- рдПрдкреЛрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕реЙрдХреЗрдЯ рдЙрдкрдпреЛрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдг
- рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдореБрджреНрджреЗ
- рд╕реНрд░реЛрдд рдХреЛрдб
рдкрд░рд┐рдЪрдп
рд╕рдВрд╕реНрдХрд░рдг 2.6 рдХреЗ рдмрд╛рдж рд╕реЗ, рдкрд╛рдпрдерди рдореЗрдВ рд▓рд┐рдирдХреНрд╕
рдПрдкреЛрд▓ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдкреАрдЖрдИ рд╢рд╛рдорд┐рд▓ рд╣реИред рдпрд╣ рд▓реЗрдЦ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдЗрд╕ рдПрдкреАрдЖрдИ рдХреЛ рдкрд╛рдпрдерди 3 рдХреЛрдб рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред
рдЕрдиреБрд╡рд╛рджрдХ рд╕реЗред
рдореИрдВрдиреЗ рдпрдерд╛рд╕рдВрднрд╡ рдЕрдВрдЧреНрд░реЗрдЬреА рд╢рдмреНрджреЛрдВ рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред рддреЛ "рд░рдЬрд┐рд╕реНрдЯрд░ / рдЕрдкрдВрдЬреАрдХреГрдд" "рд╕рджрд╕реНрдпрддрд╛ / рд╕рджрд╕реНрдпрддрд╛ рд╕рдорд╛рдкреНрдд", "рдХрдВрд╕реЛрд▓ рдкрд░ рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдВ" - "рдХрдВрд╕реЛрд▓ рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ" рдмрди рдЧрдпрд╛ред рдореИрдВрдиреЗ "рдЙрддреНрдкрд╛рджрди рд╕рд░реНрд╡рд░" рдХреЛ "рд▓реЛрдб рдХрд┐рдП рдЧрдП рд╕рд░реНрд╡рд░" рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ "рдЙрддреНрдкрд╛рджрди рдкрд░ рд╕рд░реНрд╡рд░" рд╕реЗ рдмреЗрд╣рддрд░ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИред "рдереНрд░реЗрдб" рдХрд╛ рдЕрдиреБрд╡рд╛рдж "рдереНрд░реЗрдб" рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рди рдХрд┐ "рдереНрд░реЗрдб" рдХреЗ рд░реВрдк рдореЗрдВред
рдореИрдВрдиреЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЕрдиреБрд╡рд╛рдж рдХрд╛ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рджреЗрддреЗ рд╣реБрдП рдШрдЯрдирд╛рдУрдВ, рдореЛрдб рдФрд░ рдЭрдВрдбреЗ рдХреЗ рдирд╛рдореЛрдВ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдирд╣реАрдВ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред
рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рд▓рд┐рдЦрд╛ рд╣реИ рдХрд┐ рдХреЛрдб рдкрд╛рдпрдерди 3 рдХреЗ рд▓рд┐рдП рд╣реИ, рд╕рдм рдХреБрдЫ рдЕрдЬрдЧрд░ 2.6 рдореЗрдВ рднреА рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИредрд╕реЙрдХреЗрдЯ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдЕрд╡рд░реБрджреНрдз рдХрд░рдирд╛
рдкрд╣рд▓рд╛ рдЙрджрд╛рд╣рд░рдг рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдкрд╛рдпрдерди 3.0 рд╕рд░реНрд╡рд░ рд╣реИ рдЬреЛ рдЖрдиреЗ рд╡рд╛рд▓реЗ HTTP рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП рдкреЛрд░реНрдЯ 8080 рдкрд░ рд╕реБрдирддрд╛ рд╣реИ, рдЙрдиреНрд╣реЗрдВ рдХрдВрд╕реЛрд▓ рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдПрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ HTTP рд╕рдВрджреЗрд╢ рднреЗрдЬрддрд╛ рд╣реИред
- рд▓рд╛рдЗрди 9: рд╕рд░реНрд╡рд░ рд╕реЙрдХреЗрдЯ рдмрдирд╛рдирд╛ред
- рдкрдВрдХреНрддрд┐ 10: рдмрд╛рдБрдз () рдХреЛ рдкрдВрдХреНрддрд┐ 11 рдкрд░ рдХреНрд░рд┐рдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВ, рднрд▓реЗ рд╣реА рдПрдХ рдЕрдиреНрдп рдХрд╛рд░реНрдпрдХреНрд░рдо рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЙрд╕реА рдмрдВрджрд░рдЧрд╛рд╣ рдХреЛ рд╕реБрдиреЗред рдЗрд╕рдХреЗ рдмрд┐рдирд╛, рдкреНрд░реЛрдЧреНрд░рд╛рдо рдкрд╣рд▓реЗ рд╕реЗ рд▓реЙрдиреНрдЪ рдХрд┐рдП рдЧрдП рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рдЙрд╕реА рдкреЛрд░реНрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдЦрддреНрдо рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж 1-2 рдорд┐рдирдЯ рдХреЗ рд▓рд┐рдП рдкреЛрд░реНрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдЧрд╛ред
- рдкрдВрдХреНрддрд┐ 11: рд╣рдо рдЗрд╕ рдорд╢реАрди рдХреЗ рд╕рднреА рдЙрдкрд▓рдмреНрдз IPv4 рдкрддреЛрдВ рдХреЗ рд▓рд┐рдП рдкреЛрд░реНрдЯ 8080 рдкрд░ рд╕рд░реНрд╡рд░ рд╕реЙрдХреЗрдЯ рдХреЛ рд▓рдЯрдХрд╛рддреЗ рд╣реИрдВред
- рдкрдВрдХреНрддрд┐ 12: рдЧреНрд░рд╛рд╣рдХреЛрдВ рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдХрдиреЗрдХреНрд╢рди рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡рд░ рд╕реЙрдХреЗрдЯ рдХреЛ рдмрддрд╛рдПрдВред
- рд▓рд╛рдЗрди 14: рдЬрдм рддрдХ рдПрдХ рдЗрдирдХрдорд┐рдВрдЧ рдХрдиреЗрдХреНрд╢рди рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддрдм рддрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рд░реБрдХреЗрдЧрд╛ред рдЬрдм рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╕рд░реНрд╡рд░ рд╕реЙрдХреЗрдЯ рдПрдХ рдирдпрд╛ рд╕реЙрдХреЗрдЯ рдмрдирд╛рдПрдЧрд╛ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЧреНрд░рд╛рд╣рдХ рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдорд╢реАрди рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕ рдирдП рд╕реЙрдХреЗрдЯ рдХреЛ рдХреНрд▓рд╛рдЗрдВрдЯрдХрдиреЗрдХреНрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдПрдХ рд╕реНрд╡реАрдХрд╛рд░ () рдХреЙрд▓ рджреНрд╡рд╛рд░рд╛ рд╡рд╛рдкрд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдбреНрд░реЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ IP рдкрддрд╛ рдФрд░ рд░рд┐рдореЛрдЯ рдорд╢реАрди рдХрд╛ рдкреЛрд░реНрдЯ рдирдВрдмрд░ рд╣реЛрддрд╛ рд╣реИред
- рд▓рд╛рдЗрдиреЗрдВ 15-17: рд╣рдо рд╡рд╣ рдбреЗрдЯрд╛ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ HTTP рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреЗрдЬрд╛ рдЬрд╛рдПрдЧрд╛ред HTTP рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдпрд╣рд╛рдБ рд╡рд░реНрдгрд┐рдд рд╣реИ ред
- рдкрдВрдХреНрддрд┐ 18: рд╣рдо рдХрдВрд╕реЛрд▓ рдХреЛ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреА рд╢реБрджреНрдзрддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд┐рдВрдЯ рдХрд░рддреЗ рд╣реИрдВред
- рд▓рд╛рдЗрди 19: рд╣рдо рдЧреНрд░рд╛рд╣рдХ рдХреЛ рдЬрд╡рд╛рдм рднреЗрдЬрддреЗ рд╣реИрдВред
- рд▓рд╛рдЗрдиреЗрдВ 20-22: рдХреНрд▓рд╛рдЗрдВрдЯ рдХрдиреЗрдХреНрд╢рди рдХреЛ рд╕реБрдирдиреЗ рд╡рд╛рд▓реЗ рд╕рд░реНрд╡рд░ рд╕реЙрдХреЗрдЯ рдХреА рддрд░рд╣ рдмрдВрдж рдХрд░реЗрдВред
рдЖрдзрд┐рдХрд╛рд░рд┐рдХ
HOWTO рдореЗрдВ рдкрд╛рдпрдерди рдореЗрдВ рд╕реЙрдХреЗрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд╛ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рд╡рд░реНрдгрди рд╣реИред
рдЙрджрд╛рд╣рд░рдг 1
рдХреЙрдкреА рд╕реЛрд░реНрд╕ | HTML рдХреЙрдкреА рдХрд░реЗрдВ- рдЖрдпрд╛рдд рд╕реЙрдХреЗрдЯ
- EOL1 = b '\ n \ n'
- EOL2 = b '\ n \ r \ n'
- рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ = b 'рдПрдЪрдЯреАрдЯреАрдкреА / 1.0 200 рдУрдХреЗ \ r \ n рджрд┐рдирд╛рдВрдХ: рд╕реЛрдо, 1 рдЬрдирд╡рд░реА 1996 01:01:01 GMT \ r \'
- рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ + = b 'рд╕рд╛рдордЧреНрд░реА-рдкреНрд░рдХрд╛рд░: рдкрд╛рда / рд╕рд╛рджрд╛ \ r \ n рдирд┐рдпрдВрддреНрд░рдг-рд▓рдВрдмрд╛рдИ: 13 \ r \ n \ r \ n'
- рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ + = b 'рд╣реИрд▓реЛ, рджреБрдирд┐рдпрд╛!'
- serverocket = рд╕реЙрдХреЗрдЯ ред рд╕реЙрдХреЗрдЯ ( рд╕реЙрдХреЗрдЯ .AF_INET, рд╕реЙрдХреЗрдЯ .SOCK_STREAM)
- serverocket.setsockopt ( рд╕реЙрдХреЗрдЯ .SOL_SOCKET, рд╕реЙрдХреЗрдЯ .SO_REUSEADDR, 1
- serverocket.bind (( '0.0.0.0' , 8080 ))
- serverocket.listen ( 1 )
- рдХрдиреЗрдХреНрд╢рди, рдкрддреЗ = serverocket.accept ()
- рдирд┐рд╡реЗрджрди = b ''
- рдЬрдмрдХрд┐ EOL1 рдЕрдиреБрд░реЛрдз рдореЗрдВ рдирд╣реАрдВ рд╣реИ рдФрд░ EOL2 рдЕрдиреБрд░реЛрдз рдореЗрдВ рдирд╣реАрдВ рд╣реИ :
- рдЕрдиреБрд░реЛрдз + = connectiontoclient.recv ( 1024 )
- рдкреНрд░рд┐рдВрдЯ (request.decode ())
- connectiontoclient.send (рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛)
- connectiontoclient.close ()
- serverocket.close ()
рдЙрджрд╛рд╣рд░рдг 2 рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрд╡рд░реЛрдз (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреАрдмреЛрд░реНрдб рд╕реЗ) рд╕реЗ рдкрд╣рд▓реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдХрдиреЗрдХреНрд╢рдиреЛрдВ рдХреЛ рдкреБрди: рдореБрджреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрди 15 рдореЗрдВ рдПрдХ рд▓реВрдк рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдпрд╣ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡рд░ рд╕реЙрдХреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрднреА рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдмрд▓реНрдХрд┐, рдпрд╣ рдХреЗрд╡рд▓ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рдХрдиреЗрдХреНрд╢рди рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдирдпрд╛ рд╕реЙрдХреЗрдЯ рдмрдирд╛рддрд╛ рд╣реИ, рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдВрдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЕрдВрдд рдореЗрдВ 23-24 рдкрдВрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ рдмреНрд▓реЙрдХ рдХреА рдЬрд░реВрд░рдд рд╣реИ рддрд╛рдХрд┐ рд╢реНрд░рд╡рдг рд╕рд░реНрд╡рд░ рд╕реЙрдХреЗрдЯ рд╡реИрд╕реЗ рднреА рдмрдВрдж рд╣реЛ, рднрд▓реЗ рд╣реА рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реЛрдВред
рдЙрджрд╛рд╣рд░рдг 2
рдХреЙрдкреА рд╕реЛрд░реНрд╕ | HTML рдХреЙрдкреА рдХрд░реЗрдВ- рдЖрдпрд╛рдд рд╕реЙрдХреЗрдЯ
- EOL1 = b '\ n \ n'
- EOL2 = b '\ n \ r \ n'
- рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ = b 'рдПрдЪрдЯреАрдЯреАрдкреА / 1.0 200 рдУрдХреЗ \ r \ n рджрд┐рдирд╛рдВрдХ: рд╕реЛрдо, 1 рдЬрдирд╡рд░реА 1996 01:01:01 GMT \ r \'
- рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ + = b 'рд╕рд╛рдордЧреНрд░реА-рдкреНрд░рдХрд╛рд░: рдкрд╛рда / рд╕рд╛рджрд╛ \ r \ n рдирд┐рдпрдВрддреНрд░рдг-рд▓рдВрдмрд╛рдИ: 13 \ r \ n \ r \ n'
- рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ + = b 'рд╣реИрд▓реЛ, рджреБрдирд┐рдпрд╛!'
- serverocket = рд╕реЙрдХреЗрдЯ ред рд╕реЙрдХреЗрдЯ ( рд╕реЙрдХреЗрдЯ .AF_INET, рд╕реЙрдХреЗрдЯ .SOCK_STREAM)
- serverocket.setsockopt ( рд╕реЙрдХреЗрдЯ .SOL_SOCKET, рд╕реЙрдХреЗрдЯ .SO_REUSEADDR, 1
- serverocket.bind (( '0.0.0.0' , 8080 ))
- serverocket.listen ( 1 )
- рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ :
- рдЬрдмрдХрд┐ рд╕рдЪ:
- рдХрдиреЗрдХреНрд╢рди, рдкрддреЗ = serverocket.accept ()
- рдирд┐рд╡реЗрджрди = b ''
- рдЬрдмрдХрд┐ EOL1 рдЕрдиреБрд░реЛрдз рдореЗрдВ рдирд╣реАрдВ рд╣реИ рдФрд░ EOL2 рдЕрдиреБрд░реЛрдз рдореЗрдВ рдирд╣реАрдВ рд╣реИ :
- рдЕрдиреБрд░реЛрдз + = connectiontoclient.recv ( 1024 )
- рдкреНрд░рд┐рдВрдЯ ( '-' * 40 + '\ n' + request.decode () [: - 2 ])
- connectiontoclient.send (рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛)
- connectiontoclient.close ()
- рдЕрдВрдд рдореЗрдВ :
- serverocket.close ()
рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕реЙрдХреЗрдЯреНрд╕ рдФрд░ рд▓рд┐рдирдХреНрд╕ рдПрдкреЛрд▓ рдХреЗ рд▓рд╛рдн
рдЙрджрд╛рд╣рд░рдг 2 рдореЗрдВ рджрд┐рдЦрд╛рдП рдЧрдП рд╕реЙрдХреЗрдЯреНрд╕ рдХреЛ рдмреНрд▓реЙрдХрд┐рдВрдЧ рд╕реЙрдХреЗрдЯреНрд╕ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдкрд╛рдпрдерди рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд┐рд╕реА рдШрдЯрдирд╛ рдХреЗ рдЖрдиреЗ рддрдХ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рд░реЛрдХ рджреЗрддрд╛ рд╣реИред рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рдХрдиреЗрдХреНрд╢рди рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рддрдХ рд▓рд╛рдЗрди 16 рдкрд░
рд╕реНрд╡реАрдХрд╛рд░ () рдХреЙрд▓ рдЕрд╡рд░реБрджреНрдз рд╣реИред рдЬрдм рддрдХ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдпрд╛ рдЬрдм рддрдХ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ) рддрдм рддрдХ 19
рд░реАрд╡реНрдпреВ () рдХреЙрд▓ рдСрди рд╣реИред рд▓рд╛рдЗрди 21 рдкрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рднреЗрдЬреЗ рдЧрдП рд╕рднреА рдбреЗрдЯрд╛ рдХреЛ рд▓рд┐рдирдХреНрд╕ рднреЗрдЬрдиреЗ рдХреА рдХрддрд╛рд░ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ
рд╕реЗрдВрдб () рдХреЙрд▓ рдХреЛ рдмреНрд▓реЙрдХ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЬрдм рдХреЛрдИ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдмреНрд▓реЙрдХрд┐рдВрдЧ рд╕реЙрдХреЗрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЗрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рд╕реЙрдХреЗрдЯ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдХреНрд╕рд░ рдПрдХ рдЕрд▓рдЧ рдереНрд░реЗрдб (рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдореБрдЦреНрдп рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рдПрдХ рд╕реБрдирдиреЗ рд╡рд╛рд▓рд╛ рд╕рд░реНрд╡рд░ рд╕реЙрдХреЗрдЯ рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдХрдиреЗрдХреНрд╢рди рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдмрд╛рд░ рдореЗрдВ рдЗрди рдХрдиреЗрдХреНрд╢рдиреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдирд╡ рдирд┐рд░реНрдорд┐рдд рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЙрдХреЗрдЯ рдХреЛ рдПрдХ рдЕрд▓рдЧ рдереНрд░реЗрдб рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░реЗрдЧрд╛ред рдЪреВрдВрдХрд┐ рдЗрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рд╡рд╛рд╣ рдХреЗрд╡рд▓ рдПрдХ рдЧреНрд░рд╛рд╣рдХ рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЕрдиреБрдорддрд┐ рд╣реИ рдХрд┐ рдХреБрдЫ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдиреЗрдЯрд╡рд░реНрдХ рдЕрд╡рд░реБрджреНрдз рд╣реЛрддрд╛ рд╣реИред рдпреЗ рддрд╛рд▓реЗ рдЕрдиреНрдп рдзрд╛рдЧреЛрдВ рдХреЛ рдЕрдкрдиреЗ рдХрд╛рд░реНрдп рдХрд░рдиреЗ рд╕реЗ рдирд╣реАрдВ рд░реЛрдХрддреЗ рд╣реИрдВред
рдХрдИ рдереНрд░реЗрдбреНрд╕ рдХреЗ рд╕рд╛рде рд╕реЙрдХреЗрдЯреНрд╕ рдХреЛ рдмреНрд▓реЙрдХ рдХрд░рдиреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рд░рд▓ рдХреЛрдб рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди
рдХрдорд┐рдпреЛрдВ рдХреА рдПрдХ
рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИред рдзрд╛рд░рд╛рдУрдВ рд╕реЗ рд╕рд╛рдЭрд╛ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рддрдХ рд╕рд╣реА рд╕рдВрдпреБрдХреНрдд рдкрд╣реБрдВрдЪ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рдФрд░ рдпрд╣ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╢реИрд▓реА рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдПрдХрд▓ рд╕реАрдкреАрдпреВ рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рдкреНрд░рднрд╛рд╡реА рдирд╣реАрдВ рд╣реИред
рдЕрдВрдХ C10K рдХрдИ рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзреА рд╕реЙрдХреЗрдЯреНрд╕ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд▓реНрдкреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рддрд╛ рд╣реИред рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕реЙрдХреЗрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред рдЗрд╡реЗрдВрдЯ рдЖрдиреЗ рддрдХ рдРрд╕реА рд╕реЙрдХреЗрдЯреНрд╕ рдХреЛ рдмреНрд▓реЙрдХ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдХрд╛рд░реНрдпрдХреНрд░рдо рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕реЙрдХреЗрдЯ рдкрд░ рдПрдХ рдХреНрд░рд┐рдпрд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рддреБрд░рдВрдд рд╕рдлрд▓рддрд╛ рдпрд╛ рддреНрд░реБрдЯрд┐ рдХреА рд╕реВрдЪрдирд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдпрд╣ рддрдп рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ рдХрд┐ рдЙрд╕реЗ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИред рдЪреВрдВрдХрд┐ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕реЙрдХреЗрдЯреНрд╕ рдЧреИрд░-рдЕрд╡рд░реБрджреНрдз рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдХрдИ рдереНрд░реЗрдбреНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рд╕рднреА рдХрд╛рдо рдПрдХ рд╣реА рдзрд╛рдЧреЗ рдореЗрдВ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдПрдХрд▓-рд╕реВрддреНрд░реАрдп рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рдЕрдкрдиреА рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ рдФрд░ рдпрд╣ рдХрдИ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдПрдХ рдмрд╣реБ-рдереНрд░реЗрдбреЗрдб рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: рдПрдХ рдПрдХрд▓ рдереНрд░реЗрдб рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕реЙрдХреЗрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рд░реНрд╡рд░ рдХреЗ рдиреЗрдЯрд╡рд░реНрдХ рдШрдЯрдХ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдереНрд░реЗрдбреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрд╛рд╣рд░реА рдЕрд╡рд░реБрджреНрдз рд╕рдВрд╕рд╛рдзрдиреЛрдВ, рдЬреИрд╕реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд▓рд┐рдирдХреНрд╕ 2.6 рдореЗрдВ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕реЙрдХреЗрдЯреНрд╕ рдХреЗ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рдХрдИ рддрдВрддреНрд░ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рддреАрди рдХрд╛
рдЪрдпрди ,
рдкреЛрд▓ рдФрд░
рдПрдкреЛрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╛рдпрдерди рдПрдкреАрдЖрдИ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
ред рдПрдкреЛрд▓ рдФрд░
рдкреЛрд▓ рдЪрдпрди рд╕реЗ рдмреЗрд╣рддрд░
рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдкрд╛рдпрдерди рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рд╕реЙрдХреЗрдЯ рдкрд░ рдмреНрдпрд╛рдЬ рдХреА рд╕рднреА рдШрдЯрдирд╛рдУрдВ рдкрд░ рдирдЬрд╝рд░ рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдЖрдк рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреМрди рд╕реА рдШрдЯрдирд╛рдПрдВ рдХрд┐рд╕ рд╕реЙрдХреЗрдЯ рдореЗрдВ рд╣реБрдИрдВред рдФрд░
рдПрдкреЛрд▓, рдмрджрд▓реЗ рдореЗрдВ,
рдкреЛрд▓ рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ рдкрд╛рдЗрдерди рдХрд╛рд░реНрдпрдХреНрд░рдо рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрд░реЛрдз рдХрд┐рдП рдЬрд╛рдиреЗ рдкрд░ рд╣рд░ рдмрд╛рд░ рдмреНрдпрд╛рдЬ рдХреА рдШрдЯрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рднреА рд╕реЙрдХреЗрдЯреНрд╕ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдмрд▓реНрдХрд┐, рдЬрдм рдкрд╛рдпрдерди рджреНрд╡рд╛рд░рд╛ рдкреНрд░реЗрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд┐рдирдХреНрд╕ рдЬрд╛рдВрдЪрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдпреЗ рдШрдЯрдирд╛рдПрдБ рд╣реБрдИ рд╣реИрдВ рдФрд░ рдШрдЯрдирд╛рдУрдВ рдХреА рд╕реВрдЪреА рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП,
рдПрдкреЛрд▓ рдПрдХ рд╕рд╛рде рдХрдиреЗрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ (рд╣рдЬрд╛рд░реЛрдВ) рдХреЗ рд▓рд┐рдП
рдПрдХ рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рдФрд░ рд╕реНрдХреЗрд▓реЗрдмрд▓ рддрдВрддреНрд░ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐
рдЗрди рдЧреНрд░рд╛рдлрд╝ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдПрдкреЛрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕реЙрдХреЗрдЯ рдЙрдкрдпреЛрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдг
рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЬреЛ рдПрдкреЛрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЕрдХреНрд╕рд░ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ:
- рдПрдХ рдПрдкреЛрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
- рдПрдкреЛрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реЙрдХреЗрдЯ рдкрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдШрдЯрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рджреЗрдЦрдиреЗ рдХрд╛ рдирд┐рд░реНрджреЗрд╢ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
- рдПрдкреЛрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗ рдкреВрдЫрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдкрд┐рдЫрд▓реЗ рдкреЛрд▓ рдХреЗ рдмрд╛рдж рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдШрдЯрдирд╛рдУрдВ рдореЗрдВ рдХреМрди рд╕реА рдХреБрд░реНрд╕рд┐рдпрд╛рдВ тАЛтАЛрд╣реИрдВ
- рдЗрди рд╕реЙрдХреЗрдЯреНрд╕ рдкрд░ рдХреБрдЫ рдХреНрд░рд┐рдпрд╛рдПрдВ рдХреА рдЬрд╛рддреА рд╣реИрдВред
- рдПрдкреЛрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕реЙрдХреЗрдЯреНрд╕ рдФрд░ / рдпрд╛ рджреЗрдЦреА рдЧрдИ рдШрдЯрдирд╛рдУрдВ рдХреА рд╕реВрдЪреА рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрджреЗрд╢ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
- рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪрд░рдг 3 рдХреЛ 5 рд╕реЗ рджреЛрд╣рд░рд╛рдПрдВ
- рдирд╖реНрдЯ рдХрд░ рджреА рдЧрдИ рдПрдкреЛрд▓ рд╡рд╕реНрддреБ
рдЙрджрд╛рд╣рд░рдг 3 рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд╕реЙрдХреЗрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрджрд╛рд╣рд░рдг 2 рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рджреЛрд╣рд░рд╛рддрд╛ рд╣реИред рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рдзрд╛рдЧрд╛ рдмрджрд▓реЗ рдореЗрдВ рдХрдИ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рддрд╛ рд╣реИред
- рдкрдВрдХреНрддрд┐ 1: рдЪрдпрдирд┐рдд рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдПрдкреЛрд▓ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╣реИред
- рдкрдВрдХреНрддрд┐ 13: рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдмреНрд▓реЙрдХрд┐рдВрдЧ рд╕реЙрдХреЗрдЯреНрд╕ рдХреЛ рдЧреИрд░-рдЕрд╡рд░реЛрдзрдХ (рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕) рдореЛрдб рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
- рдкрдВрдХреНрддрд┐ 15: рдПрдХ рдПрдкреЛрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдирд╛ред
- рд▓рд╛рдЗрди 16: рд╕рд░реНрд╡рд░ рд╕реЙрдХреЗрдЯ рдкрд░ рдШрдЯрдирд╛рдУрдВ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдВред рдЬрдм рд╕рд░реНрд╡рд░ рд╕реЙрдХреЗрдЯ рдХрдиреЗрдХреНрд╢рди рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ рддреЛ рдПрдХ рд░реАрдб рдЗрд╡реЗрдВрдЯ рд╣реЛрддрд╛ рд╣реИред
- рд▓рд╛рдЗрди 19: рдХрдиреЗрдХреНрд╢рди рдбрд┐рдХреНрд╢рдирд░реА рдореЗрдВ рдЙрдирдХреЗ рд╕рдВрдмрдВрдзрд┐рдд рдиреЗрдЯрд╡рд░реНрдХ рдХрдиреЗрдХреНрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдлрд╛рдЗрд▓ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ (рдкреВрд░реНрдгрд╛рдВрдХ) рдореИрдк рд╣реЛрддреЗ рд╣реИрдВред
- рдкрдВрдХреНрддрд┐ 21: рдПрдкреЛрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЫреЛрдбрд╝ рджреЗрдирд╛ рдХрд┐ рдХреНрдпрд╛ рдХреЛрдИ рдЕрдкреЗрдХреНрд╖рд┐рдд рдШрдЯрдирд╛ рд╣реБрдИ рд╣реИред рдкреИрд░рд╛рдореАрдЯрд░ "1" рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╣рдо 1 рд╕реЗрдХрдВрдб рддрдХ рдХреА рдШрдЯрдирд╛ рдХреЗ рд▓рд┐рдП рдЗрдВрддрдЬрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВред рдпрджрд┐ рдмреНрдпрд╛рдЬ рдХреА рдХреЛрдИ рднреА рдШрдЯрдирд╛ рдкрд╣рд▓реЗ рд╣реЛрддреА рд╣реИ, рддреЛ рдХреНрд╡реЗрд░реА рддреБрд░рдВрдд рдЗрди рдШрдЯрдирд╛рдУрдВ рдХреА рд╕реВрдЪреА рд╡рд╛рдкрд╕ рдХрд░ рджреЗрдЧреАред
- рдкрдВрдХреНрддрд┐ 22: рдШрдЯрдирд╛рдУрдВ рдХреЛ рдЯреНрдпреВрдкрд▓реНрд╕ рдХреЗ рдХреНрд░рдо рд╕реЗ рд▓реМрдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ( рдлрд╛рдЗрд▓реЛ , рдЗрд╡реЗрдВрдЯ рдХреЛрдб )ред рдлрд╛рдЗрд▓реЛ рдлрд╛рдЗрд▓ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдХрд╛ рдПрдХ рдкрд░реНрдпрд╛рдп рд╣реИ рдФрд░ рд╣рдореЗрд╢рд╛ рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ рд╣реЛрддрд╛ рд╣реИред
- рдкрдВрдХреНрддрд┐ 23: рдпрджрд┐ рд╕рд░реНрд╡рд░ рд╕реЙрдХреЗрдЯ рдкрд░ рдХреЛрдИ рд░реАрдб рдИрд╡реЗрдВрдЯ рд╣реБрдЖ рд╣реИ, рддреЛ рдЖрдк рдПрдХ рдирдпрд╛ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЙрдХреЗрдЯ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред
- рд▓рд╛рдЗрди 25: рдирдП рд╕реЙрдХреЗрдЯ рдХреЛ рдиреЙрди-рдмреНрд▓реЙрдХрд┐рдВрдЧ рдореЛрдб рдкрд░ рд╕реЗрдЯ рдХрд░реЗрдВред
- рдкрдВрдХреНрддрд┐ 26: рдирдП рд╕реЙрдХреЗрдЯ рдкрд░ рдИрд╡реЗрдВрдЯ ( EPOLLIN ) рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдВред
- рдкрдВрдХреНрддрд┐ 31: рдпрджрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЙрдХреЗрдЯ рдкрд░ рдХреЛрдИ рд░реАрдб рдИрд╡реЗрдВрдЯ рд╣реБрдЖ рд╣реИ, рддреЛ рд╣рдо рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рдЖрдП рдирдП рдбреЗрдЯрд╛ рдХреЛ рдкрдврд╝рддреЗ рд╣реИрдВред
- рдкрдВрдХреНрддрд┐ 33: рдЕрдиреБрд░реЛрдз рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдкрдврд╝рдиреЗ рдХреА рдШрдЯрдирд╛рдУрдВ рд╕реЗ рд╕рджрд╕реНрдпрддрд╛ рд╕рдорд╛рдкреНрдд рдХрд░реЗрдВ рдФрд░ рдШрдЯрдирд╛рдУрдВ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдВ ( EPOLLOUT )ред рдпреЗ рдШрдЯрдирд╛рдПрдБ рддрдм рд╣реЛрддреА рд╣реИрдВ рдЬрдм рдЖрдк рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдбреЗрдЯрд╛ рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВред
- рдкрдВрдХреНрддрд┐ 34: рд╣рдо рдПрдХ рдЕрдиреБрд░реЛрдз рдкреНрд░рд┐рдВрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рдмреАрдЪ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдбреЗрдЯрд╛ рдХреЛ рдПрдХ рд╕рд╛рде рдЗрдХрдЯреНрдард╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдПрдХ рд╕рдВрджреЗрд╢ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
- рдкрдВрдХреНрддрд┐ 35: рдпрджрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЙрдХреЗрдЯ рдкрд░ рдХреЛрдИ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдИрд╡реЗрдВрдЯ рд╣реБрдЖ рд╣реИ, рддреЛ рдЖрдк рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдирдпрд╛ рдбреЗрдЯрд╛ рднреЗрдЬрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
- рд▓рд╛рдЗрдиреЗрдВ 36-38: рдПрдХ рд╕рдордп рдореЗрдВ рдмреИрдЪреЛрдВ рдореЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдбреЗрдЯрд╛ рднреЗрдЬрдирд╛ рдЬрдм рддрдХ рдХрд┐ рдкреВрд░реА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдЬрдорд╛ рдирд╣реАрдВ рдХреА рдЧрдИ рд╣реЛред
- рдкрдВрдХреНрддрд┐ 39: рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рднреЗрдЬреЗ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдЖрдЧреЗ рдкрдврд╝рдиреЗ рдпрд╛ рд▓рд┐рдЦрдиреЗ рдХреА рдШрдЯрдирд╛рдУрдВ рд╕реЗ рд╕рджрд╕реНрдпрддрд╛ рд╕рдорд╛рдкреНрдд рдХрд░ рд▓реЗрддреЗ рд╣реИрдВред
- рд▓рд╛рдЗрди 40: рдПрдХ рд╕реЙрдХреЗрдЯ рдореЗрдВ рд╢рдЯрдбрд╛рдЙрди рдХреЙрд▓рд┐рдВрдЧ рдХрдиреЗрдХреНрд╢рди рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдкрд╣рд▓реЗ рдХрдиреЗрдХреНрд╢рди рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рд╢рдЯрдбрд╛рдЙрди рдХреЙрд▓ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдм рдбреЗрдЯрд╛ рдирд╣реАрдВ рднреЗрдЬреЗрдЧрд╛ рдпрд╛ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рдФрд░ рдЗрд╕рдХреЗ рднрд╛рдЧ рдХреЗ рд▓рд┐рдП рд╕реЙрдХреЗрдЯ рдХреЛ рдмрдВрдж рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
- рд▓рд╛рдЗрди 41: HUP (рд╣реИрдВрдЧ-рдЕрдк, рд╣реИрдВрдЧ) рдИрд╡реЗрдВрдЯ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЙрдХреЗрдЯ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рд╣реЛ рдЧрдпрд╛ рд╣реИ (рдмрдВрдж рдерд╛), рдпрд╛рдиреА рдЗрд╕реЗ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред HUP рдИрд╡реЗрдВрдЯ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рд╡реЗ рд╣рдореЗрд╢рд╛ рд╕реЙрдХреЗрдЯ рдкрд░ рд╣реЛрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдПрдкреЛрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
- рд▓рд╛рдЗрди 42: рдЗрд╕ рд╕реЙрдХреЗрдЯ рдореЗрдВ рдШрдЯрдирд╛рдУрдВ рд╕реЗ рд╕рджрд╕реНрдпрддрд╛ рд╕рдорд╛рдкреНрдд рдХрд░реЗрдВред
- рдкрдВрдХреНрддрд┐ 43: рд╕реЙрдХреЗрдЯ рдмрдВрдж рдХрд░реЗрдВред
- рд▓рд╛рдЗрдиреНрд╕ 18-45: рдЯреНрд░рд╛рдЗ -рдХреИрдЪ рдмреНрд▓реЙрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреАрдмреЛрд░реНрдб рд╕реЗ рдмрд╛рдзрд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
- рд▓рд╛рдЗрдиреНрд╕ 46-48: рдУрдкрди рд╕реЙрдХреЗрдЯреНрд╕ рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдкрд░ рдкрд╛рдпрдерди рдЙрдиреНрд╣реЗрдВ рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕реНрдкрд╖реНрдЯ рд╕рдорд╛рдкрди рдЕрдЪреНрдЫрд╛ рдЕрднреНрдпрд╛рд╕ рд╣реИред
рдЙрджрд╛рд╣рд░рдг 3
рдХреЙрдкреА рд╕реЛрд░реНрд╕ | HTML рдХреЙрдкреА рдХрд░реЗрдВ- рдЖрдпрд╛рдд рд╕реЙрдХреЗрдЯ, рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ
- EOL1 = b '\ n \ n'
- EOL2 = b '\ n \ r \ n'
- рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ = b 'рдПрдЪрдЯреАрдЯреАрдкреА / 1.0 200 рдУрдХреЗ \ r \ n рджрд┐рдирд╛рдВрдХ: рд╕реЛрдо, 1 рдЬрдирд╡рд░реА 1996 01:01:01 GMT \ r \'
- рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ + = b 'рд╕рд╛рдордЧреНрд░реА-рдкреНрд░рдХрд╛рд░: рдкрд╛рда / рд╕рд╛рджрд╛ \ r \ n рдирд┐рдпрдВрддреНрд░рдг-рд▓рдВрдмрд╛рдИ: 13 \ r \ n \ r \ n'
- рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ + = b 'рд╣реИрд▓реЛ, рджреБрдирд┐рдпрд╛!'
- serverocket = рд╕реЙрдХреЗрдЯ ред рд╕реЙрдХреЗрдЯ ( рд╕реЙрдХреЗрдЯ .AF_INET, рд╕реЙрдХреЗрдЯ .SOCK_STREAM)
- serverocket.setsockopt ( рд╕реЙрдХреЗрдЯ .SOL_SOCKET, рд╕реЙрдХреЗрдЯ .SO_REUSEADDR, 1
- serverocket.bind (( '0.0.0.0' , 8080 ))
- serverocket.listen ( 1 )
- serverocket.setblocking ( 0 )
- epoll = select .epoll ()
- epoll.register (serverocket.fileno) (, .EPOLLIN) рдЪреБрдиреЗрдВ
- рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ :
- рдХрдиреЗрдХреНрд╢рди = {}; рдЕрдиреБрд░реЛрдз = {}; рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдПрдБ = {}
- рдЬрдмрдХрд┐ рд╕рдЪ:
- рдШрдЯрдирд╛рдПрдБ = epoll.poll ( 1 )
- fileno рдХреЗ рд▓рд┐рдП, рдШрдЯрдирд╛рдУрдВ рдореЗрдВ рдШрдЯрдирд╛:
- рдЕрдЧрд░ fileno == serverocket.fileno ():
- рдХрдиреЗрдХреНрд╢рди, рдкрддрд╛ = serverocket.accept ()
- рдХрдиреЗрдХреНрд╢рди.рд╕реЗрдЯрдмреНрд▓реЙрдХрд┐рдВрдЧ ( 0 )
- epoll.register (connection.fileno) (, рдЪреБрдиреЗрдВ .EPOLLIN)
- рдХрдиреЗрдХреНрд╢рди [connection.fileno ()] = рдХрдиреЗрдХреНрд╢рди
- рдЕрдиреБрд░реЛрдз [рдХрдиреЗрдХреНрд╢рди .fileno ()] = b ''
- рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ [рдХрдиреЗрдХреНрд╢рди .fileno ()] = рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛
- рдПрд▓реАрдл рдШрдЯрдирд╛ рдФрд░ рдЪреБрдиреЗрдВ .EPOLLIN:
- рдЕрдиреБрд░реЛрдз [fileno] + = рдХрдиреЗрдХреНрд╢рди [fileno] .recv ( 1024 )
- рдпрджрд┐ рдЕрдиреБрд░реЛрдзреЛрдВ рдореЗрдВ EOL1 [fileno] рдпрд╛ рдЕрдиреБрд░реЛрдзреЛрдВ рдореЗрдВ EOL2 [fileno]:
- epoll.modify (рдлрд╛рдЗрдиреЗрдиреЛ, рд╕реЗрд▓реЗрдХреНрдЯ .EPOLLOUT)
- рдкреНрд░рд┐рдВрдЯ ( '-' * 40 + '\ n' + рдЕрдиреБрд░реЛрдз [рдлрд╛рдЗрд▓реЛ] .рдбреЙрд╕реНрдХреЛрдк () [: - 2 ])
- рдПрд▓реАрдл рдШрдЯрдирд╛ рдФрд░ рдЪреБрдиреЗрдВ .EPOLLOUT:
- byteswritten = рдХрдиреЗрдХреНрд╢рди [fileno]ред рдПрд╕реЗрдВрдб (рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдПрдВ [fileno])
- рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ [fileno] = рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ [fileno] [рдмрд╛рдЗрдЯреНрд╕ рд▓рд┐рдЦрд┐рдд:]
- рдЕрдЧрд░ рд▓реЗрди (рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ [fileno]) == 0 :
- epoll.modify (рдлрд╝рд┐рд▓рд┐рдиреЛ, 0 )
- рдХрдиреЗрдХреНрд╢рди [fileno]ред рд╢рдЯрдбрд╛рдЙрди ( рд╕реЙрдХреЗрдЯ .SHUT_RDWR)
- рдПрд▓реАрдл рдШрдЯрдирд╛ рдФрд░ рдЪрдпрди .EPOLLHUP:
- epoll.unregister (fileno)
- рдХрдиреЗрдХреНрд╢рди [fileno] .close ()
- рдбреЗрд▓ рдХрдиреЗрдХреНрд╢рди [рдлрд╛рдЗрд▓реЛ]
- рдЕрдВрдд рдореЗрдВ :
- epoll.unregister (serverocket.fileno ())
- epoll.close ()
- serverocket.close ()
рдПрдкреЛрд▓ рдореЗрдВ рдСрдкрд░реЗрд╢рди рдХреЗ рджреЛ рдореЛрдб рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдПрдЬ-рдЯреНрд░рд┐рдЧрд░ рдФрд░ рд▓реЗрд╡рд▓-рдЯреНрд░рд┐рдЧрд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдЬ-рдЯреНрд░рд┐рдЧрд░ рдореЛрдб рдореЗрдВ, рдХреЙрд▓ рдХрд░рдирд╛
epoll.poll () рдХреЗрд╡рд▓ рдкрдврд╝рдиреЗ рдпрд╛ рд▓рд┐рдЦрдиреЗ рдХреА рдШрдЯрдирд╛рдУрдВ рдХреЗ рдмрд╛рдж рд╕реЙрдХреЗрдЯ рдкрд░ рд╣реБрдИ рдШрдЯрдирд╛рдУрдВ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░реЗрдЧрд╛ред рдХреЙрд▓рд░ рдХреЛ рдЗрд╕ рдШрдЯрдирд╛ рд╕реЗ рдЬреБрдбрд╝реЗ рд╕рднреА рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдмрд┐рдирд╛ рдХреЙрд▓ рдХрд┐рдП рдмрд╛рд░-рдмрд╛рд░
epoll.poll () рдореЗрдВред рдЬрдм рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдИрд╡реЗрдВрдЯ рдХрд╛ рдбреЗрдЯрд╛ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╕реЙрдХреЗрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░рдпрд╛рд╕ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рдЬрдиреНрдо рджреЗрдВрдЧреЗред рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рд╕реНрддрд░-рдЯреНрд░рд┐рдЧрд░ рдореЛрдб рдореЗрдВ,
epoll.poll () рдХреЛ рдмрд╛рд░-рдмрд╛рд░ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдмреНрдпрд╛рдЬ рдХреА рдШрдЯрдирд╛рдУрдВ рдХреА рдмрд╛рд░-рдмрд╛рд░ рд╕реВрдЪрдирд╛ рдорд┐рд▓реЗрдЧреА рдЬрдм рддрдХ рдХрд┐ рдШрдЯрдирд╛рдУрдВ рд╕реЗ рдЬреБрдбрд╝реЗ рд╕рднреА рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛред рд╕реНрддрд░-рдЯреНрд░рд┐рдЧрд░ рдореЛрдб рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рдСрдкрд░реЗрд╢рди рдХреЗ рджреМрд░рд╛рди рдХреЛрдИ рдЕрдкрд╡рд╛рдж рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдПрдХ рд╕рд░реНрд╡рд░ рд╕реЙрдХреЗрдЯ рдХреЛ рдПрдХ
рдПрдкреЛрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдШрдЯрдирд╛рдУрдВ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдм рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдПрдЬ-рдЯреНрд░рд┐рдЧрд░ рдореЛрдб рдореЗрдВ, рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдирдП рдХрдиреЗрдХреНрд╢рди рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрд▓
рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП () рдЬрдм рддрдХ рдХрд┐
рд╕реЙрдХреЗрдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ ред рдЕрдкрд╡рд╛рдж рдЕрдкрд╡рд╛рдж
рд╣реЛрддрд╛ рд╣реИ ред рд╕реНрддрд░-рдЯреНрд░рд┐рдЧрд░ рдореЛрдб рдореЗрдВ, рдПрдХ рдПрдХрд▓
рд╕реНрд╡реАрдХрд╛рд░ () рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдХрддрд╛рд░ рдореЗрдВ рдЕрдЧрд▓реА рдШрдЯрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдкреЛрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдлрд┐рд░ рд╕реЗ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг 3 рд╕реНрддрд░-рдЯреНрд░рд┐рдЧрд░ рдореЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдореЛрдб рд╣реИред рдЙрджрд╛рд╣рд░рдг 4 рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рдПрдЬ-рдЯреНрд░рд┐рдЧрд░ рдореЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВред рд▓рд╛рдЗрдиреНрд╕ 25, 36, рдФрд░ 45 рдРрд╕реЗ рдЪрдХреНрд░реЛрдВ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрддреЗ рд╣реИрдВ рдЬреЛ рддрдм рддрдХ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рдЬрдм рддрдХ рдХрд┐ рдХреЛрдИ рдЕрдкрд╡рд╛рдж рдирд╣реАрдВ рд╣реЛрддрд╛ (рдпрд╛ рдпрд╣ рдЬреНрдЮрд╛рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рд╕рднреА рдбреЗрдЯрд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рд╣реЛ рдЪреБрдХреЗ рд╣реИрдВ)ред рд▓рд╛рдЗрдиреНрд╕ 32, 38, рдФрд░ 48 рдХреИрдЪ рдЕрдкрд╡рд╛рдж рд╣реИрдВред рдЕрдВрдд рдореЗрдВ, рд▓рд╛рдЗрдиреЛрдВ 16, 28, 41, рдФрд░ 51 рдореЗрдВ рдПрдХ
EPOLLET рдорд╛рд╕реНрдХ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдПрдЬ-рдЯреНрд░рд┐рдЧрд░ рдореЛрдб рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг 4
рдХреЙрдкреА рд╕реЛрд░реНрд╕ | HTML рдХреЙрдкреА рдХрд░реЗрдВ- рдЖрдпрд╛рдд рд╕реЙрдХреЗрдЯ, рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ
- EOL1 = b '\ n \ n'
- EOL2 = b '\ n \ r \ n'
- рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ = b 'рдПрдЪрдЯреАрдЯреАрдкреА / 1.0 200 рдУрдХреЗ \ r \ n рджрд┐рдирд╛рдВрдХ: рд╕реЛрдо, 1 рдЬрдирд╡рд░реА 1996 01:01:01 GMT \ r \'
- рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ + = b 'рд╕рд╛рдордЧреНрд░реА-рдкреНрд░рдХрд╛рд░: рдкрд╛рда / рд╕рд╛рджрд╛ \ r \ n рдирд┐рдпрдВрддреНрд░рдг-рд▓рдВрдмрд╛рдИ: 13 \ r \ n \ r \ n'
- рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ + = b 'рд╣реИрд▓реЛ, рджреБрдирд┐рдпрд╛!'
- serverocket = рд╕реЙрдХреЗрдЯ ред рд╕реЙрдХреЗрдЯ ( рд╕реЙрдХреЗрдЯ .AF_INET, рд╕реЙрдХреЗрдЯ .SOCK_STREAM)
- serverocket.setsockopt ( рд╕реЙрдХреЗрдЯ .SOL_SOCKET, рд╕реЙрдХреЗрдЯ .SO_REUSEADDR, 1
- serverocket.bind (( '0.0.0.0' , 8080 ))
- serverocket.listen ( 1 )
- serverocket.setblocking ( 0 )
- epoll = select .epoll ()
- epoll.register (serverocket.fileno) (, рдЪреБрдиреЗрдВ .EPOLLIN | select .EPOLLET)
- рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ :
- рдХрдиреЗрдХреНрд╢рди = {}; рдЕрдиреБрд░реЛрдз = {}; рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдПрдБ = {}
- рдЬрдмрдХрд┐ рд╕рдЪ:
- рдШрдЯрдирд╛рдПрдБ = epoll.poll ( 1 )
- fileno рдХреЗ рд▓рд┐рдП, рдШрдЯрдирд╛рдУрдВ рдореЗрдВ рдШрдЯрдирд╛:
- рдЕрдЧрд░ fileno == serverocket.fileno ():
- рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ :
- рдЬрдмрдХрд┐ рд╕рдЪ:
- рдХрдиреЗрдХреНрд╢рди, рдкрддрд╛ = serverocket.accept ()
- рдХрдиреЗрдХреНрд╢рди.рд╕реЗрдЯрдмреНрд▓реЙрдХрд┐рдВрдЧ ( 0 )
- epoll.register (connection.fileno) (, select .EPOLLIN | select .EPOLLET)ред
- рдХрдиреЗрдХреНрд╢рди [connection.fileno ()] = рдХрдиреЗрдХреНрд╢рди
- рдЕрдиреБрд░реЛрдз [рдХрдиреЗрдХреНрд╢рди .fileno ()] = b ''
- рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ [рдХрдиреЗрдХреНрд╢рди .fileno ()] = рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛
- рд╕реЙрдХреЗрдЯ рдХреЛ рдЫреЛрдбрд╝рдХрд░ред
- рдкрд╛рд╕
- рдПрд▓реАрдл рдШрдЯрдирд╛ рдФрд░ рдЪреБрдиреЗрдВ .EPOLLIN:
- рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ :
- рдЬрдмрдХрд┐ рд╕рдЪ:
- рдЕрдиреБрд░реЛрдз [fileno] + = рдХрдиреЗрдХреНрд╢рди [fileno] .recv ( 1024 )
- рд╕реЙрдХреЗрдЯ рдХреЛ рдЫреЛрдбрд╝рдХрд░ред
- рдкрд╛рд╕
- рдпрджрд┐ рдЕрдиреБрд░реЛрдзреЛрдВ рдореЗрдВ EOL1 [fileno] рдпрд╛ рдЕрдиреБрд░реЛрдзреЛрдВ рдореЗрдВ EOL2 [fileno]:
- epoll.modify (рдлрд╛рдЗрдиреЗрдиреЛ, рд╕реЗрд▓реЗрдХреНрдЯ .EPOLLOUT | рд╕рд┐рд▓реЗрдХреНрдЯ .EPOLLET)
- рдкреНрд░рд┐рдВрдЯ ( '-' * 40 + '\ n' + рдЕрдиреБрд░реЛрдз [рдлрд╛рдЗрд▓реЛ] .рдбреЙрд╕реНрдХреЛрдк () [: - 2 ])
- рдПрд▓реАрдл рдШрдЯрдирд╛ рдФрд░ рдЪреБрдиреЗрдВ .EPOLLOUT:
- рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ :
- рдЬрдмрдХрд┐ рд▓реЗрди (рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ [fileno])> 0 :
- byteswritten = рдХрдиреЗрдХреНрд╢рди [fileno]ред рдПрд╕реЗрдВрдб (рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдПрдВ [fileno])
- рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ [fileno] = рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ [fileno] [рдмрд╛рдЗрдЯреНрд╕ рд▓рд┐рдЦрд┐рдд:]
- рд╕реЙрдХреЗрдЯ рдХреЛ рдЫреЛрдбрд╝рдХрд░ред
- рдкрд╛рд╕
- рдЕрдЧрд░ рд▓реЗрди (рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ [fileno]) == 0 :
- epoll.modify (рдлрд╛рдЗрдиреЗрдиреЛ, рд╕реЗрд▓реЗрдХреНрдЯ .EPOLLET)
- рдХрдиреЗрдХреНрд╢рди [fileno]ред рд╢рдЯрдбрд╛рдЙрди ( рд╕реЙрдХреЗрдЯ .SHUT_RDWR)
- рдПрд▓реАрдл рдШрдЯрдирд╛ рдФрд░ рдЪрдпрди .EPOLLHUP:
- epoll.unregister (fileno)
- рдХрдиреЗрдХреНрд╢рди [fileno] .close ()
- рдбреЗрд▓ рдХрдиреЗрдХреНрд╢рди [рдлрд╛рдЗрд▓реЛ]
- рдЕрдВрдд рдореЗрдВ :
- epoll.unregister (serverocket.fileno ())
- epoll.close ()
- serverocket.close ()
рд╕рднреА рд╕рдорд╛рдирддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП, рд╕реНрддрд░-рдЯреНрд░рд┐рдЧрд░ рдореЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдХреНрд╕рд░
рдЪрдпрди рдпрд╛
рдкреЛрд▓ рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдкреЛрд░реНрдЯ рдХрд░рддреЗ рд╕рдордп рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдПрдЬ-рдЯреНрд░рд┐рдЧрд░ рдореЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рджреНрд╡рд╛рд░рд╛ рдЗрд╡реЗрдВрдЯ рд░рд╛рдЬреНрдп рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рдорд░реНрдерди рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред
рдЗрди рджреЛ рдореЛрдбреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕реЙрдХреЗрдЯреНрд╕ рдХреЛ
EPOLLONESHOT рдИрд╡реЗрдВрдЯ рдореЗрдВ рднреА рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдм рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдИрд╡реЗрдВрдЯ рдХреЗрд╡рд▓ рдПрдХрд▓ рдХреЙрд▓ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рд╣реИ
epoll.poll (), рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдпрд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рджреЗрдЦреА рдЧрдИ рдШрдЯрдирд╛рдУрдВ рдХреА рд╕реВрдЪреА рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдореБрджреНрджреЗ
рд╕рд░реНрд╡рд░ рдХрдиреЗрдХреНрд╢рди рдХрддрд╛рд░ рдХреА рд▓рдВрдмрд╛рдИ
рд╕рднреА рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреА 12 рд╡реАрдВ рдкрдВрдХреНрддрд┐ рдореЗрдВ
serverocket.listen () рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдкреИрд░рд╛рдореАрдЯрд░ рд╕рд░реНрд╡рд░ рдХрдиреЗрдХреНрд╢рди рдХрддрд╛рд░ рдХреА рд▓рдВрдмрд╛рдИ рд╣реИ (рдмреИрдХрд▓реЙрдЧ рд╕реБрдиреЛ)ред рдпрд╣ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдЯреАрд╕реАрдкреА / рдЖрдИрдкреА рдХрдиреЗрдХреНрд╢рди рдХреА рдЕрдзрд┐рдХрддрдо рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдкрд╛рдпрдиреЙрди рдкреНрд░реЛрдЧреНрд░рд╛рдо рджреНрд╡рд╛рд░рд╛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдП рдЬрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕рд┐рд╕реНрдЯрдо рдХрддрд╛рд░ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рд░ рдмрд╛рд░ рдЬрдм рдПрдХ рд╕рд░реНрд╡рд░ рд╕реЙрдХреЗрдЯ рдкрд░ рдкрд╛рдпрдерди рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЙрд▓
рд╕реНрд╡реАрдХрд╛рд░ () рдХрд░рддрд╛ рд╣реИ, рддреЛ рдХрдиреЗрдХреНрд╢рди рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдХрддрд╛рд░ рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдЕрдиреНрдп рдЖрдиреЗ рд╡рд╛рд▓реЗ рдХрдиреЗрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдореБрдлреНрдд рд╕реНрдерд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЬрдм рдХрддрд╛рд░ рднрд░ рдЬрд╛рддреА рд╣реИ, рддреЛ рдирдП рдЖрдиреЗ рд╡рд╛рд▓реЗ рдХрдиреЗрдХреНрд╢рди рдХреЛ рдЪреБрдкрдЪрд╛рдк рдирдЬрд░рдЕрдВрджрд╛рдЬ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреА рддрд░рдл рдЕрдирд╛рд╡рд╢реНрдпрдХ рджреЗрд░реА рд╣реЛрддреА рд╣реИред рдПрдХ рд╡реНрдпрд╕реНрдд рд╕рд░реНрд╡рд░ рдЖрдорддреМрд░ рдкрд░ рд╕реИрдХрдбрд╝реЛрдВ рдФрд░ рд╣рдЬрд╛рд░реЛрдВ рд╕рдорд╡рд░реНрддреА рдХрдиреЗрдХреНрд╢рдиреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП 1 рдХрд╛ рдореВрд▓реНрдп рдЕрдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛ред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рдЬрдм рдПрдХ рд╕рд╛рде HTTP 1.0 рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд╕реИрдХрдбрд╝реЛрдВ рдХреЗ рд╕рд╛рде рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ab рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ 50 рд╕реЗ рдХрдо рдХреА рдХрддрд╛рд░ рдХреА рд▓рдВрдмрд╛рдИ рдХрднреА-рдХрднреА рдПрдХ рдЧрдВрднреАрд░ рдкреНрд░рджрд░реНрд╢рди рдбреНрд░реЙрдк рд╣реЛ рд╕рдХрддреА рд╣реИред
рдЯреАрд╕реАрдкреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕
TCP_CORK рд╡рд┐рдХрд▓реНрдк рддреИрдпрд╛рд░ рд╣реЛрдиреЗ рддрдХ рдбреЗрдЯрд╛ рднреЗрдЬрдирд╛ (рдмреЛрддрд▓ рдмрдВрдж) рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг 5 рдХреА рд▓рд╛рдЗрдиреЛрдВ 34 рдФрд░ 40 рдореЗрдВ рдЪрд┐рддреНрд░рд┐рдд рдпрд╣ рд╡рд┐рдХрд▓реНрдк, HTTP / 1.1 рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ HTTP рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг 5
рдХреЙрдкреА рд╕реЛрд░реНрд╕ | HTML рдХреЙрдкреА рдХрд░реЗрдВ- рдЖрдпрд╛рдд рд╕реЙрдХреЗрдЯ, рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ
- EOL1 = b '\ n \ n'
- EOL2 = b '\ n \ r \ n'
- рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ = b 'рдПрдЪрдЯреАрдЯреАрдкреА / 1.0 200 рдУрдХреЗ \ r \ n рджрд┐рдирд╛рдВрдХ: рд╕реЛрдо, 1 рдЬрдирд╡рд░реА 1996 01:01:01 GMT \ r \'
- рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ + = b 'рд╕рд╛рдордЧреНрд░реА-рдкреНрд░рдХрд╛рд░: рдкрд╛рда / рд╕рд╛рджрд╛ \ r \ n рдирд┐рдпрдВрддреНрд░рдг-рд▓рдВрдмрд╛рдИ: 13 \ r \ n \ r \ n'
- рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ + = b 'рд╣реИрд▓реЛ, рджреБрдирд┐рдпрд╛!'
- serverocket = рд╕реЙрдХреЗрдЯ ред рд╕реЙрдХреЗрдЯ ( рд╕реЙрдХреЗрдЯ .AF_INET, рд╕реЙрдХреЗрдЯ .SOCK_STREAM)
- serverocket.setsockopt ( рд╕реЙрдХреЗрдЯ .SOL_SOCKET, рд╕реЙрдХреЗрдЯ .SO_REUSEADDR, 1
- serverocket.bind (( '0.0.0.0' , 8080 ))
- serverocket.listen ( 1 )
- serverocket.setblocking ( 0 )
- epoll = select .epoll ()
- epoll.register (serverocket.fileno) (, .EPOLLIN) рдЪреБрдиреЗрдВ
- рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ :
- рдХрдиреЗрдХреНрд╢рди = {}; рдЕрдиреБрд░реЛрдз = {}; рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдПрдБ = {}
- рдЬрдмрдХрд┐ рд╕рдЪ:
- рдШрдЯрдирд╛рдПрдБ = epoll.poll ( 1 )
- fileno рдХреЗ рд▓рд┐рдП, рдШрдЯрдирд╛рдУрдВ рдореЗрдВ рдШрдЯрдирд╛:
- рдЕрдЧрд░ fileno == serverocket.fileno ():
- рдХрдиреЗрдХреНрд╢рди, рдкрддрд╛ = serverocket.accept ()
- рдХрдиреЗрдХреНрд╢рди.рд╕реЗрдЯрдмреНрд▓реЙрдХрд┐рдВрдЧ ( 0 )
- epoll.register (connection.fileno) (, рдЪреБрдиреЗрдВ .EPOLLIN)
- рдХрдиреЗрдХреНрд╢рди [connection.fileno ()] = рдХрдиреЗрдХреНрд╢рди
- рдЕрдиреБрд░реЛрдз [рдХрдиреЗрдХреНрд╢рди .fileno ()] = b ''
- рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ [рдХрдиреЗрдХреНрд╢рди .fileno ()] = рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛
- рдПрд▓реАрдл рдШрдЯрдирд╛ рдФрд░ рдЪреБрдиреЗрдВ .EPOLLIN:
- рдЕрдиреБрд░реЛрдз [fileno] + = рдХрдиреЗрдХреНрд╢рди [fileno] .recv ( 1024 )
- рдпрджрд┐ рдЕрдиреБрд░реЛрдзреЛрдВ рдореЗрдВ EOL1 [fileno] рдпрд╛ рдЕрдиреБрд░реЛрдзреЛрдВ рдореЗрдВ EOL2 [fileno]:
- epoll.modify (рдлрд╛рдЗрдиреЗрдиреЛ, рд╕реЗрд▓реЗрдХреНрдЯ .EPOLLOUT)
- рдХрдиреЗрдХреНрд╢рди [fileno] .setsockopt ( рд╕реЙрдХреЗрдЯ .IPPROTO_TCP, рд╕реЙрдХреЗрдЯ .TCP_CORK, 1 )
- рдкреНрд░рд┐рдВрдЯ ( '-' * 40 + '\ n' + рдЕрдиреБрд░реЛрдз [рдлрд╛рдЗрд▓реЛ] .рдбреЙрд╕реНрдХреЛрдк () [: - 2 ])
- рдПрд▓реАрдл рдШрдЯрдирд╛ рдФрд░ рдЪреБрдиреЗрдВ .EPOLLOUT:
- byteswritten = рдХрдиреЗрдХреНрд╢рди [fileno]ред рдПрд╕реЗрдВрдб (рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдПрдВ [fileno])
- рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ [fileno] = рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ [fileno] [рдмрд╛рдЗрдЯреНрд╕ рд▓рд┐рдЦрд┐рдд:]
- рдЕрдЧрд░ рд▓реЗрди (рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ [fileno]) == 0 :
- рдХрдиреЗрдХреНрд╢рди [fileno] .setsockopt ( рд╕реЙрдХреЗрдЯ .IPPROTO_TCP, рд╕реЙрдХреЗрдЯ .TCP_CORK, 0 )
- epoll.modify (рдлрд╝рд┐рд▓рд┐рдиреЛ, 0 )
- рдХрдиреЗрдХреНрд╢рди [fileno]ред рд╢рдЯрдбрд╛рдЙрди ( рд╕реЙрдХреЗрдЯ .SHUT_RDWR)
- рдПрд▓реАрдл рдШрдЯрдирд╛ рдФрд░ рдЪрдпрди .EPOLLHUP:
- epoll.unregister (fileno)
- рдХрдиреЗрдХреНрд╢рди [fileno] .close ()
- рдбреЗрд▓ рдХрдиреЗрдХреНрд╢рди [рдлрд╛рдЗрд▓реЛ]
- рдЕрдВрдд рдореЗрдВ :
- epoll.unregister (serverocket.fileno ())
- epoll.close ()
- serverocket.close ()
рджреВрд╕рд░реА рдУрд░,
TCP_NODELAY рд╡рд┐рдХрд▓реНрдк рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рднреА рдбреЗрдЯрд╛ рдХреЛ
рд╕реЙрдХреЗрдЯ.рд╕реЗрдВрдб () рдХреЛ рднреЗрдЬрд╛ рдЬрд╛рдП рдЬреЛ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рджреНрд╡рд╛рд░рд╛ рдмрдлрд░рд┐рдВрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рддреБрд░рдВрдд рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рднреЗрдЬрд╛ рдЬрд╛рдПред рдЙрджрд╛рд╣рд░рдг 6 рдХреЗ рд▓рд╛рдЗрди 14 рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рдпрд╣ рд╡рд┐рдХрд▓реНрдк, SSH рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рдЕрдиреНрдп рд░рд┐рдпрд▓-рдЯрд╛рдЗрдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг 6
рдХреЙрдкреА рд╕реЛрд░реНрд╕ | HTML рдХреЙрдкреА рдХрд░реЗрдВ- рдЖрдпрд╛рдд рд╕реЙрдХреЗрдЯ, рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ
- EOL1 = b '\ n \ n'
- EOL2 = b '\ n \ r \ n'
- рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ = b 'рдПрдЪрдЯреАрдЯреАрдкреА / 1.0 200 рдУрдХреЗ \ r \ n рджрд┐рдирд╛рдВрдХ: рд╕реЛрдо, 1 рдЬрдирд╡рд░реА 1996 01:01:01 GMT \ r \'
- рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ + = b 'рд╕рд╛рдордЧреНрд░реА-рдкреНрд░рдХрд╛рд░: рдкрд╛рда / рд╕рд╛рджрд╛ \ r \ n рдирд┐рдпрдВрддреНрд░рдг-рд▓рдВрдмрд╛рдИ: 13 \ r \ n \ r \ n'
- рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ + = b 'рд╣реИрд▓реЛ, рджреБрдирд┐рдпрд╛!'
- serverocket = рд╕реЙрдХреЗрдЯ ред рд╕реЙрдХреЗрдЯ ( рд╕реЙрдХреЗрдЯ .AF_INET, рд╕реЙрдХреЗрдЯ .SOCK_STREAM)
- serverocket.setsockopt ( рд╕реЙрдХреЗрдЯ .SOL_SOCKET, рд╕реЙрдХреЗрдЯ .SO_REUSEADDR, 1
- serverocket.bind (( '0.0.0.0' , 8080 ))
- serverocket.listen ( 1 )
- serverocket.setblocking ( 0 )
- serverocket.setsockopt ( рд╕реЙрдХреЗрдЯ .IPPROTO_TCP, рд╕реЙрдХреЗрдЯ .TCP_NODELAY, 1 )
- epoll = select .epoll ()
- epoll.register (serverocket.fileno) (, .EPOLLIN) рдЪреБрдиреЗрдВ
- рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ :
- рдХрдиреЗрдХреНрд╢рди = {}; рдЕрдиреБрд░реЛрдз = {}; рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдПрдБ = {}
- рдЬрдмрдХрд┐ рд╕рдЪ:
- рдШрдЯрдирд╛рдПрдБ = epoll.poll ( 1 )
- fileno рдХреЗ рд▓рд┐рдП, рдШрдЯрдирд╛рдУрдВ рдореЗрдВ рдШрдЯрдирд╛:
- рдЕрдЧрд░ fileno == serverocket.fileno ():
- рдХрдиреЗрдХреНрд╢рди, рдкрддрд╛ = serverocket.accept ()
- рдХрдиреЗрдХреНрд╢рди.рд╕реЗрдЯрдмреНрд▓реЙрдХрд┐рдВрдЧ ( 0 )
- epoll.register (connection.fileno) (, рдЪреБрдиреЗрдВ .EPOLLIN)
- рдХрдиреЗрдХреНрд╢рди [connection.fileno ()] = рдХрдиреЗрдХреНрд╢рди
- рдЕрдиреБрд░реЛрдз [рдХрдиреЗрдХреНрд╢рди .fileno ()] = b ''
- рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ [рдХрдиреЗрдХреНрд╢рди .fileno ()] = рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛
- рдПрд▓реАрдл рдШрдЯрдирд╛ рдФрд░ рдЪреБрдиреЗрдВ .EPOLLIN:
- рдЕрдиреБрд░реЛрдз [fileno] + = рдХрдиреЗрдХреНрд╢рди [fileno] .recv ( 1024 )
- рдпрджрд┐ рдЕрдиреБрд░реЛрдзреЛрдВ рдореЗрдВ EOL1 [fileno] рдпрд╛ рдЕрдиреБрд░реЛрдзреЛрдВ рдореЗрдВ EOL2 [fileno]:
- epoll.modify (рдлрд╛рдЗрдиреЗрдиреЛ, рд╕реЗрд▓реЗрдХреНрдЯ .EPOLLOUT)
- рдкреНрд░рд┐рдВрдЯ ( '-' * 40 + '\ n' + рдЕрдиреБрд░реЛрдз [рдлрд╛рдЗрд▓реЛ] .рдбреЙрд╕реНрдХреЛрдк () [: - 2 ])
- рдПрд▓реАрдл рдШрдЯрдирд╛ рдФрд░ рдЪреБрдиреЗрдВ .EPOLLOUT:
- byteswritten = рдХрдиреЗрдХреНрд╢рди [fileno]ред рдПрд╕реЗрдВрдб (рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдПрдВ [fileno])
- рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ [fileno] = рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ [fileno] [рдмрд╛рдЗрдЯреНрд╕ рд▓рд┐рдЦрд┐рдд:]
- рдЕрдЧрд░ рд▓реЗрди (рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ [fileno]) == 0 :
- epoll.modify (рдлрд╝рд┐рд▓рд┐рдиреЛ, 0 )
- рдХрдиреЗрдХреНрд╢рди [fileno]ред рд╢рдЯрдбрд╛рдЙрди ( рд╕реЙрдХреЗрдЯ .SHUT_RDWR)
- рдПрд▓реАрдл рдШрдЯрдирд╛ рдФрд░ рдЪрдпрди .EPOLLHUP:
- epoll.unregister (fileno)
- рдХрдиреЗрдХреНрд╢рди [fileno] .close ()
- рдбреЗрд▓ рдХрдиреЗрдХреНрд╢рди [рдлрд╛рдЗрд▓реЛ]
- рдЕрдВрдд рдореЗрдВ :
- epoll.unregister (serverocket.fileno ())
- epoll.close ()
- serverocket.close ()
рд╕реНрд░реЛрдд рдХреЛрдб
рдЗрд╕ рдкреГрд╖реНрда рдХреЗ рдЙрджрд╛рд╣рд░рдг рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд░реВрдк рд╕реЗ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ рдФрд░ рдЗрдиреНрд╣реЗрдВ
рдпрд╣рд╛рдБ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛
рд╣реИ ред
рдЕрдиреБрд╡рд╛рджрдХ рд╕реЗ
рдЬрдм рдХреЛрдИ рджреВрд░рд╕реНрде рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЙрдХреЗрдЯ
рдмрдВрдж рдХрд░рддрд╛ рд╣реИ, рддреЛ
EPOLLIN рдИрд╡реЗрдВрдЯ рд╕реНрдерд╛рдиреАрдп рд╕реЙрдХреЗрдЯ рдкрд░
рдЖрддрд╛ рд╣реИ , рд▓реЗрдХрд┐рди
VV рдкрдврд╝рдиреЗ рдкрд░ рдХреБрдЫ рднреА рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рддреЛ рдкрд▓
рдХреЙрдкреА рд╕реЛрд░реНрд╕ | HTML рдХреЙрдкреА рдХрд░реЗрдВ
рдПрд▓реАрдл рдШрдЯрдирд╛ рдФрд░ рдЪреБрдиреЗрдВ .EPOLLIN:
рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ :
рдЬрдмрдХрд┐ рд╕рдЪ:
рдЕрдиреБрд░реЛрдз [fileno] + = рдХрдиреЗрдХреНрд╢рди [fileno] .recv ( 1024 )
рдЖрдк рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:
рдХреЙрдкреА рд╕реЛрд░реНрд╕ | HTML рдХреЙрдкреА рдХрд░реЗрдВ
рдПрд▓реАрдл рдШрдЯрдирд╛ рдФрд░ рдЪреБрдиреЗрдВ .EPOLLIN:
рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ :
рдЬрдмрдХрд┐ рд╕рдЪ:
рдбреЗрдЯрд╛ = рдХрдиреЗрдХреНрд╢рди [fileno] .recv ( 1024 )
рдпрджрд┐ рдбреЗрдЯрд╛ рдирд╣реАрдВ рд╣реИ:
epoll.modify (рдлрд╛рдЗрдиреЗрдиреЛ, рд╕реЗрд▓реЗрдХреНрдЯ .EPOLLET)
рдХрдиреЗрдХреНрд╢рди [fileno]ред рд╢рдЯрдбрд╛рдЙрди ( рд╕реЙрдХреЗрдЯ .SHUT_RDWR)
рдФрд░ :
рдЕрдиреБрд░реЛрдз [рдлрд╛рдЗрд▓реЛ] + = рдбреЗрдЯрд╛
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдХрдиреЗрдХреНрд╢рди рдЯреВрдЯ рдЬрд╛рдиреЗ рдкрд░ рдХреЛрдИ рд▓реВрдкрд┐рдВрдЧ рдирд╣реАрдВ рд╣реЛрдЧреАред рдореИрдВ рдПрдХ рдРрд╕реЗ рдХреЛрдб рд╕реЗ рдорд┐рд▓рд╛, рдЬрд╣рд╛рдВ рдЕрдВрддрд░ рддреБрд░рдВрдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдЧрд▓рдд рдирд┐рд░реНрдзрд╛рд░рдг рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ рдмрд╛рд╣рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рд▓рдЧрд╛рддрд╛рд░ рдРрд╕реА рдмреЗрдХрд╛рд░ рдпрд╛рддреНрд░рд╛рдУрдВ рдХреЗ рдмрд╛рджред