рдЯреЛрд░реНрдирд╛рдбрд┐рдУ 2 = рдмрд╡рдВрдбрд░ + рд╕реЙрдХреЗрдЯ.IO

рд╕реЙрдХреЗрдЯ рдХреНрдпрд╛ рд╣реИ?


рдпрд╣ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИ рдЬреЛ рд╕рд░реНрд╡рд░ рдФрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рдмреАрдЪ рдПрдХ рд╕реНрдерд╛рдпреА рд╕рдВрдмрдВрдз рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдореБрдЦреНрдп рд▓рд╛рдн: рдпрд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕рдорд░реНрдерд┐рдд рд╕рдмрд╕реЗ рдХреБрд╢рд▓ рдкрд░рд┐рд╡рд╣рди рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

рдХреНрдпрд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╡реЗрдм рд╕реЙрдХреЗрдЯ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ? рдорд╣рд╛рди, рд╣рдо рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдХреНрдпрд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рдкрддрд╛ рд╣реИ рдХрд┐ AJAX рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ? рд╣рдо рд▓рдВрдмреЗ рдорддрджрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдХреНрдпрд╛ рдпрд╣ рдПрдХ рдкреНрд░рд╛рдЪреАрди рдЗрдВрдЯрд░рдиреЗрдЯ рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рд╣реИ? рд╣рдо html рдлрд╝рд╛рдЗрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдФрд░ рдЗрддрдиреЗ рдкрд░ред

рд╕реЙрдХреЗрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВредрд╣рд┐рдпреЛ рдкрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓рд┐рдЦрд╛ рд╣реИред "рджреЗрд╢реА" рд╕реЙрдХреЗрдЯ.IO рд╕рд░реНрд╡рд░ рдиреЛрдб рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред рдЬреЗрдПрд╕рдИ

TornadIO2 рдХреНрдпрд╛ рд╣реИ?


рдпрд╣ рдЯреЙрд░рдиреЗрдбреЛ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдЪрд▓рдиреЗ рд╡рд╛рд▓реА рдПрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИ рдФрд░ рд╕реЙрдХреЗрдЯ.рдЖрдИрдУ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рд╕рдорд░реНрдерди рдХрд░ рд░рд╣реА рд╣реИред

рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдореБрдЦреНрдп рд▓рд╛рдн рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЖрднрд╛рд╕реА рдХрдиреЗрдХреНрд╢рди рдкрд░ рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЕрдореВрд░реНрддрддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдпрд╣ рдирд╣реАрдВ рд╕реЛрдЪрдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдкрд░рд┐рд╡рд╣рди рд╡рд┐рднрд┐рдиреНрди рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред

рдЗрд╕реЗ TornadIO2 рдХреНрдпреЛрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ? рдХреНрдпреЛрдВрдХрд┐ рдЯреЙрд░реНрдиреЗрдбрд┐рдпреЛ рд╣реИ рдЬреЛ рд╕реЙрдХреЗрдЯ рдХреЗ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдФрд░ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг (1.2 рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП)ред рд╕реЙрдХреЗрдЯ.рдЖрдИрдУ 0.7 рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрдиреЗ рд╕реЗ, рдкрд░рд┐рд╡рд╣рди рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдмрджрд▓ рдЧрдпрд╛ рдФрд░ рдирдИ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рджрд┐рдЦрд╛рдИ рджреА рдЬреЛ рдкрд╣рд▓реЗ рдЯреЛрд░рдирд╛рдбрд┐рдпреЛ рдХреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реБрдИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, TornadIO2 рдХреЛ Tornado 2.1 рдпрд╛ рдЙрдЪреНрдЪрддрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╣реЛрдо рдкреЗрдЬ рдпрд╣рд╛рдВ рд╣реИ: http://github.com/MrJoes/tornadio2
рдкреНрд░рд▓реЗрдЦрди (рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ) рдпрд╣рд╛рдБ рд╣реИ: http://tornadio2.readthedocs.org/

рдХреЛрдб рдХреЗ рдХрд░реАрдм


рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╕реЙрдХреЗрдЯ.рдЖрдИрдУ рдЧреНрд░рд╛рд╣рдХ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
var conn = io.connect('http://myserver'); conn.on('connect', function() { alert('connected'); }); conn.on('message', function(msg) { alert('Got ' + msg); }); conn.on('disconnect', function() { alert('disconnected'); }); 

рдореЛрдЯреЗ рддреМрд░ рдкрд░, рд╣рдо рдПрдХ рдХрдиреЗрдХреНрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рд╡рд┐рднрд┐рдиреНрди рдШрдЯрдирд╛рдУрдВ рдореЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдПрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ: рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛, рдПрдХ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛, рдФрд░ рд╕рд░реНрд╡рд░ рд╕реЗ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ред

рдпрджрд┐ рд╣рдо рд╕рд░реНрд╡рд░ рдкрд░ рд╕рдВрджреЗрд╢ рднреЗрдЬрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдХрд░рддреЗ рд╣реИрдВ:

 conn.send('Hello World!'); 


рд╕реЙрдХреЗрдЯ.рдЖрдИрдУ рдЬреЛрд╕рди рд╡рд╕реНрддреБрдУрдВ рдХреЛ рднреЗрдЬрдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ:

 conn.json.send({msg: 'Hello World', a: 10}); 


рдЕрдм рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╕рд░реНрд╡рд░ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:

 from tornado import web from tornadio2 import SocketConnection, TornadioRouter, SocketServer # Declare connection class class MyConnection(SocketConnection): def on_open(self, info): print 'Client connected' def on_message(self, msg): print 'Got', msg self.send(msg) def on_close(self): print 'Client disconnected' # Create TornadIO2 router router = TornadioRouter(MyConnection) # Create Tornado application with urls from router app = web.Application(router.urls, socket_io_port=8001) # Start server if __name__ == '__main__': SocketServer(app) 


рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдореБрдЦреНрдп рд╣рд┐рд╕реНрд╕рд╛ MyConnection рд╣реИ ред рдЬрдм рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд░реНрд╡рд░ рд╕реЗ рдЬреБрдбрд╝ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ TornadIO2 рдЗрд╕ рдХреНрд▓рд╛рд╕ рдХреЛ рддреБрд░рдВрдд рдХрд░реЗрдЧрд╛ рдФрд░ on_open () рдХреЙрд▓ рдХрд░реЗрдЧрд╛ ред рдЬрдм рд╕рд░реНрд╡рд░ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рдПрдХ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рднреЗрдЬреЗ рдЧрдП рд╕рдВрджреЗрд╢ рдХреЗ рд╕рд╛рде on_message рдкрд░ рдХреЙрд▓ рдХрд░реЗрдЧрд╛ред рдФрд░ рдЗрд╕реА рддрд░рд╣ред

TornadioRouter рдПрдХ рдХрдиреЗрдХреНрд╢рди рд╡рд░реНрдЧ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕реЙрдХреЗрдЯ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рднреА рдиреЗрдЯрд╡рд░реНрдХ рд▓реЙрдЬрд┐рдХ рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рддрд╛ рд╣реИред рдХреНрд▓рд╛рдЗрдВрдЯ рдареАрдХ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

рдЕрдЧрд▓рд╛, рд╣рдо рдЯреЛрд░рдиреЗрдбреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рддреЗ рд╣реИрдВ, рдЗрд╕реЗ рд░рд╛рдЙрдЯрд░ рд╕реЗ рд▓рд┐рдВрдХ рдЦрд┐рд▓рд╛рддреЗ рд╣реИрдВ рдФрд░ рд╕рд░реНрд╡рд░ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рд╕реЙрдХреЗрдЯрд╕реНрд╡рд░ , рдЯреЙрд░реНрдиреЗрдбреЛ HTTP рд╕рд░реНрд╡рд░ рдФрд░ рдлреНрд▓реИрд╢ рдкреЙрд▓рд┐рд╕реА рд╕рд░реНрд╡рд░ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╕ рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЖрд╡рд░рдг рд╣реИред

рдЖрдк рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдФрд░ рдирд┐рдпрдорд┐рдд рдСрдмреНрдЬреЗрдХреНрдЯ рджреЛрдиреЛрдВ рдХреЛ рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВ, рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд╡реЗ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ json рдореЗрдВ рдХреНрд░рдордмрджреНрдз рд╣реИрдВред

рдШрдЯрдирд╛рдУрдВ


рд╕реЙрдХреЗрдЯ.рдЖрдИрдУ рдХреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ, рдШрдЯрдирд╛рдУрдВ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рджрд┐рдЦрд╛рдИ рджреА рд╣реИ - "рд╕рд╛рдорд╛рдиреНрдп" рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдЖрд░рдкреАрд╕реА рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдпрджрд┐ рдЖрдк рдорд╛рдкрджрдВрдбреЛрдВ (рдпрд╛ рдЙрдирдХреЗ рдирд╛рдореЛрдВ) рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдЧрд▓рддреА рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдПрдХ рдЕрдкрд╡рд╛рдж рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдХрдиреЗрдХреНрд╢рди рдмрд╕ рдмрдВрдж рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

рдШрдЯрдирд╛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рднреЗрдЬреА рдЬрд╛рддреА рд╣реИ:

 var conn = io.connect('http://myserver:1234'); conn.on('connect', function() { conn.emit('hello', 'Joes'); }); 


рдФрд░ рд╕рд░реНрд╡рд░ рдкрд░ рд╡реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рд╣реЛрддреЗ рд╣реИрдВ:

 from tornadio2 import SocketConnection, event class MyConnection(SocketConnection): @event('hello') def hello(self, name): print 'Got hello from %s' % name 


рд╕рд░реНрд╡рд░ рд╕реЗ рдШрдЯрдирд╛рдУрдВ рдХреЛ рднреЗрдЬрдирд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

 var conn = io.connect('http://myserver:1234'); conn.on('connect', function() { conn.emit('ping', 'Joes'); }); conn.on('pong', function(name) { alert(name); // Will show Joes }); 


рдФрд░ рд╕рд░реНрд╡рд░:

 from tornadio2 import SocketConnection, event class MyConnection(SocketConnection): @event('ping') def ping(self, name): self.emit('pong', name) 


рд░рд╕реАрдж


рдПрдХ рд╕рдВрджреЗрд╢ рдпрд╛ рдШрдЯрдирд╛ рднреЗрдЬрддреЗ рд╕рдордп, рдЖрдк рдкреБрд╖реНрдЯрд┐ рдХреЗ рд▓рд┐рдП рдкреВрдЫ рд╕рдХрддреЗ рд╣реИрдВ - рдЬрдм рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ рдФрд░ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдПрдХ рдПрд╕реАрдХреЗ рдкреИрдХреЗрдЯ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рднреЗрдЬрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХреЙрд▓рдмреИрдХ рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ред
рдШрдЯрдирд╛рдУрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдк рд╣реИрдВрдбрд▓рд░ рд╕реЗ рдореВрд▓реНрдп рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рднреЗрдЬрд╛ рдЬрд╛рдПрдЧрд╛, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ REQUEST / RESPONSE рдкреИрдЯрд░реНрди рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдХреЛрдб рдорд┐рд▓рддрд╛ рд╣реИред

рдПрдХ рдПрдкреАрдЖрдИ рдкрд░рд┐рдкреНрд░реЗрдХреНрд╖реНрдп рд╕реЗ, рдпрд╣ рд╕рдм рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

 var conn = io.connect('http://localhost'); conn.on('connect', function() { // Emit 'whoareyou' event and provide callback function that will be // called once event was handled by the server. conn.emit('whoareyou', function(name) { alert(name); // Will print 'Joes' }); }); 


рдФрд░ рд╕рд░реНрд╡рд░:

 class MyConnection(SocketConnection): @event('whoareyou') def woohoo(self): return 'Joes' 


рд╕рд░реНрд╡рд░ рднреА рдкреБрд╖реНрдЯрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рд╕рд╛рде рд╕рдВрджреЗрд╢ рднреЗрдЬ рд╕рдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╛ рддреЛ self.send () рдХреЗ рд▓рд┐рдП рдХреЙрд▓рдмреИрдХ рдкрд╛рд╕ рдХрд░реЗрдВ рдпрд╛ рдШрдЯрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП self.emit_ack () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:

 class MyConnection(SocketConnection): @event('hello') def myhello(self): self.emit_ack('hello', self.on_ack) def on_ack(self, msg, data): print 'Woohoo, got ACK', msg, data 


Tornado.gen рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ


рдЯреЙрд░рдиреЗрдбреЛ рд╕рдВрд╕реНрдХрд░рдг 2.1.0 рдХреЗ рд╕рд╛рде рд╢реБрд░реВ, рдХреЙрд▓рдмреИрдХ рдХреЗ рдмрд┐рдирд╛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ рд╣реИред

Tornado.gen рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп , рдХреЛрдб рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ - рдпрджрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рджреЛ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдкрд╣рд▓реЗ рдПрдХ рдХреЛ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд░реВрдк рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдкрд╣рд▓реЗ рд╡рд╛рд▓реЗ рдХреЗ рдЦрддреНрдо рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рджреВрд╕рд░реЗ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рд╣рдореЗрд╢рд╛ рд╕рд░реНрд╡рд░ рд╕реЗ рдЕрдкреЗрдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реИред

рдЗрди рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП tornadio2.gen.sync_engine рдбреЗрдХреЛрд░реЗрдЯрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдпрджрд┐ рдЖрдк рдбреЗрдХреЛрд░реЗрдЯрд░ рдореЗрдВ рд╕рдВрджреЗрд╢ (рдпрд╛ рдИрд╡реЗрдВрдЯ) рд╣реИрдВрдбрд▓рд░ рдХреЛ рд▓рдкреЗрдЯрддреЗ рд╣реИрдВ, рддреЛ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдЙрд╕ рдХреНрд░рдо рдореЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬреЛ рдЙрдиреНрд╣реЗрдВ рдкреНрд░рд╛рдкреНрдд рд╣реБрдЖ рдерд╛, рд▓реЗрдХрд┐рди ioloop рдЕрд╡рд░реБрджреНрдз рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЛ рджреЗрдЦрдирд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИ рдЬреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдм рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдкреНрд░рджрд░реНрд╢рди рдХреА рдирд┐рдЧрд░рд╛рдиреА


TornadIO2 рдореЗрдВ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдореЙрдирд┐рдЯрд░ рд╢рд╛рдорд┐рд▓ рд╣реИ рдЬреЛ рд╡рд┐рднрд┐рдиреНрди рдШрдЯрдирд╛рдУрдВ рдХреЛ рдЧрд┐рдирддрд╛ рд╣реИ: рд╕рдХреНрд░рд┐рдп рдХрдиреЗрдХреНрд╢рдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛, рднреЗрдЬреЗ рдЧрдП рдФрд░ рдкреНрд░рд╛рдкреНрдд рд╕рдВрджреЗрд╢реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб, рдФрд░ рдЗрд╕реА рддрд░рд╣ред рдХрд╛рдЙрдВрдЯрд░реЛрдВ рдХреА рд╕реВрдЪреА рдЕрднреА рднреА рдмрд╣реБрдд рдмрдбрд╝реА рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЦреБрд╢реА рд╣реЛрдЧреАред

рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдпрд╣ рдПрдХ рдЧреНрд░рд╛рдл рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдХреЗ рдЖрдБрдХрдбрд╝реЗ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдЬреЛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:


рдЙрддреНрдкрд╛рджрдХрддрд╛


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

рд╕рд░реНрд╡рд░ рдХреЛрдб рдХрд╛рдлреА рд╣рд▓реНрдХрд╛ рд╣реИ рдФрд░ рдУрд╡рд░рд╣реЗрдб рдмрд╣реБрдд рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЙрджрд╛рд╣рд░рдг


TornadIO2 рдореЗрдВ рдХрдИ рдЙрдкрдпреЛрдЧ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ: рд╕рд░рд▓ рдЪреИрдЯ, рд╕реЙрдХреЗрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд┐рдВрдЧред
рд╕рднреА рдЙрджрд╛рд╣рд░рдг рдпрд╣рд╛рдБ рд╣реИрдВ ред

рд╕реНрдерд┐рддрд┐ рдФрд░ рднрд╡рд┐рд╖реНрдп


TornadIO2 рдЕрднреА рддрдХ PyPI рдХреЗ рд╕рд╛рде рдкрдВрдЬреАрдХреГрдд рдирд╣реАрдВ рд╣реИ - рдЬреИрд╕реЗ рд╣реА рдпрд╣ рд╣реИред

рд╕рд░реНрд╡рд░ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИ (рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ) - рдпрд╣ рдЖрдо рддреМрд░ рдкрд░ рдореЗрд░реА рдЫреЛрдЯреА, рдмрдВрдж рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдкрд░ рдШреВрдорддрд╛ рд╣реИред рд╕рднреА рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рдЖрд╢реНрдЪрд░реНрдп рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

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

Source: https://habr.com/ru/post/In133350/


All Articles