рд╣рдо MySQL рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдиреЛрдбрдЬ рдХреЗ рд▓рд┐рдП C ++ рдореЗрдВ рдПрдХ рдореЙрдбреНрдпреВрд▓ рд▓рд┐рдЦрддреЗ рд╣реИрдВ


рдкрд░рд┐рдЪрдп


рдХрдИ рд▓реЛрдЧ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА Node.js рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рдЪреБрдХреЗ рд╣реИрдВ, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдпрд╣ рдХрдИ рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЙрдкрдХрд░рдг рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЬреЛ рдореБрдЭреЗ Node.js рдХреЗ рд▓рд┐рдП рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ, рд╡рд╣ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИ рдФрд░ рдЕрдХреНрд╕рд░ рдЙрддреНрдкрдиреНрди рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рд╕реЗрдЯ рд╣реИред рдпрджрд┐ рдХреБрдЫ рдорд╛рдирдХ рдкреИрдХреЗрдЬ рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рддреЛ npmjs.org рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдореЙрдбреНрдпреВрд▓ рдорд┐рд▓ рд╕рдХрддреЗ рд╣реИрдВ

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдРрд╕реА рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпрд╛рдБ рд╣реЛрддреА рд╣реИрдВ, рдЬрдм рд╡рд╣рд╛рдБ рдЙрдкрд▓рдмреНрдз рд╣рд░ рдЪреАрдЬ рдХрд╛рдо рдХрд░рддреА рд╣реИ рдпрд╛ рдЖрдк рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЙрд╕ рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреА рд╣реИ, рдпрд╛ рджреА рдЧрдИ рд╢рд░реНрддреЛрдВ рдХреЗ рддрд╣рдд рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреА рд╣реИ, рдпрд╛ рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╣реИ - рдмрд╕ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдЬреЛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рд╡рд╣ рдмрд╕ рдЧрд╛рдпрдм рд╣реИред рдореБрдЭреЗ рдПрдХ рдореЙрдбреНрдпреВрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА рдЬреЛ MySQL рдФрд░ рдЪреМрдереЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝ рдХрд░ рд╕рдХреЗред рдкрд╣рд▓реЗ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдП рдЧрдП рдореЙрдбреНрдпреВрд▓ рдиреЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкрд╛рдВрдЪрд╡реЗрдВ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд┐рдпрд╛, рдмрд╛рдж рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЕрдиреНрдп рдереЗ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдХреЛрдИ рднреА рдЦреЛрдЬрдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рдерд╛ рдЬреЛ рдЖрдкрдХреЛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд┐рдП рдЧрдП рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВ рдЗрд╕ рдирддреАрдЬреЗ рдкрд░ рдкрд╣реБрдВрдЪрд╛ рдХрд┐ рдореИрдВ C ++ рдореЗрдВ рдЬрд┐рд╕ рдореЙрдбреНрдпреВрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЙрд╕реЗ рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реВрдВ рдФрд░ рдЗрд╕реЗ рдиреЛрдб.рдЬреЗрдПрд╕ рдХреЗ рдПрдбрдСрди рдХреЗ рд░реВрдк рдореЗрдВ рдбрд┐рдЬрд╛рдЗрди рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдпрджрд┐ рдЖрдк рдореЙрдбреНрдпреВрд▓ рдмрдирд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдмрд┐рд▓реНрд▓реА рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред

рдЙрдкрдХрд░рдг


рд╣рдо рд▓рд┐рдирдХреНрд╕ рдХреЗ рддрд╣рдд рдореЙрдбреНрдпреВрд▓ рд▓рд┐рдЦреЗрдВрдЧреЗред рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ рдЙрдкрдХрд░рдгреЛрдВ рд╕реЗ:

рдпрд╣ рд╕рдм рдЖрдкрдХреЗ рд╡рд┐рддрд░рдг рдореЗрдВ рдХреИрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЖрдкрдХреЛ рдЕрдкрдиреЗ рд▓рд┐рдП рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдиреЛрдб-рдЬрд┐рдк рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде, рдпрд╣ рдПрдирдкреАрдПрдо рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рдиреЛрдб рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рд╕рд╛рде рдЖрддрд╛ рд╣реИ:
npm install node-gyp

рдореЙрдбреНрдпреВрд▓ рд▓рд┐рдЦрдирд╛


рддреЛ рдиреЛрдб.рдЬреЗрдПрд╕ рдЧреВрдЧрд▓ рд╡реА 8 рд╕реЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЗрдВрдЬрди рдкрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдПрдХ рдордВрдЪ рд╣реИред рддрджрдиреБрд╕рд╛рд░, рд╣рдорд╛рд░реЗ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд╣рдореЗрдВ рд╡реА 8 рдЗрдВрдЬрди рдХреА рд╡рд╕реНрддреБрдУрдВ рд╕реЗ рдирд┐рдкрдЯрдирд╛ рд╣реЛрдЧрд╛ред рдореЗрд░реЗ рдЬреАрд╡рди рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕ рдЗрдВрдЬрди рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рдЪреАрдЯ рд╢реАрдЯ рдХрд╛ рд╣реЛрдирд╛ рдЙрдЪрд┐рдд рд╣реИ, рдореИрдВрдиреЗ рдЗрд╕реЗ рдЪреБрдирд╛ рд╣реИ, рд╕рд╛рде рд╣реА MySQL рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП C рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдПрдХ рд╕рдВрджрд░реНрдн, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдВ рджреЗрдЦреЗрдВред

рдореЙрдбреНрдпреВрд▓ рдХрд┐рд╕рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрддреЗ рд╣реИрдВ?

рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ mysql_sync.cc рд╣реЛрдЧрд╛, рдЬрдм рд╣рдо рдЖрд╡рд╢реНрдпрдХ рд╣реЗрдбрд░ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдирд╛рдо рд╕реНрдерд╛рди рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ:
 #include <node.h> #include <node_buffer.h> #include <v8.h> #include <mysql.h> using namespace v8; 

рдиреЛрдб.рдЬреЗрдПрд╕ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рдореЙрдбреНрдпреВрд▓ рдХрд╛ рд╕рдВрдЪрд╛рд▓рди NODE_MODULE рдореИрдХреНрд░реЛ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдирд╛рдо рдФрд░ рдореЙрдбреНрдпреВрд▓ рдХрдиреЗрдХреНрдЯ рд╣реЛрдиреЗ рдкрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдирд╛рдо рд╣реЛрддрд╛ рд╣реИред
 void init(Handle<Object> target) { target->Set(String::NewSymbol("create"), FunctionTemplate::New(create)->GetFunction()); } NODE_MODULE(mysql_sync, init) 

рдЗрд╕рд▓рд┐рдП, рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐, init рдлрд╝рдВрдХреНрд╢рди рдХреБрдЫ рднреА рдирд╣реАрдВ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдЗрд╕реЗ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдо рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдирд╛рдо рдмрдирд╛рдиреЗ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ , рд╕реЗрдЯ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдирд╛рдо рдХрдХреНрд╖рд╛ V8 рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИ рдФрд░ рдЗрд╕реЗ рд╕реНрдерд┐рд░ рдлрд╝рдВрдХреНрд╢рди NewSymbol рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╣рдо рд╡рд╛рдВрдЫрд┐рдд рд▓рд╛рдЗрди рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рдкреНрд░реЙрдкрд░реНрдЯреА рдХреА рд╡реИрд▓реНрдпреВ рд╡рд╣ рдлрдВрдХреНрд╢рди рд╣реЛрдЧреА рдЬрд┐рд╕реЗ рдХреНрд░рд┐рдПрдЯ рдирд╛рдо рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рд╕рдм рдХреБрдЫ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдмрд╛рдд рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдкрд╣рд▓реЗ рд▓реЛрдбрд┐рдВрдЧ рдкрд░ рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдиреЛрдб рдЙрд╕ рд╡рд╕реНрддреБ рдХреЛ рдХреИрд╢ рдХрд░реЗрдЧрд╛ рдЬреЛ рдЗрдирд┐рдЯ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдкрд░ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдХреЙрд▓ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред
рдпрджрд┐ рдЖрдк рдЕрднреА рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдореЙрдбреНрдпреВрд▓ рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВ, рдФрд░ рдиреЛрдб рдореЗрдВ рдирд┐рдореНрди рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ
 console.log(require('./mysql_sync.node')); 

рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╕реНрдХреНрд░реАрди рдкрд░ рд╣рдо рдЗрд╕ рдкрд░рд┐рдгрд╛рдо рдХреЛ рджреЗрдЦреЗрдВрдЧреЗ:
 { create: [Function] } 

рдкрд╣рд▓рд╛ рдЪрд░рдг рддреИрдпрд╛рд░ рд╣реИ, рдмрдирд╛рдПрдВ рдлрд╝рдВрдХреНрд╢рди рдкрд░ рдЬрд╛рдПрдВред

рд╣рдорд╛рд░реЗ рдореЙрдбреНрдпреВрд▓ рдХреА рдПрдХ рд╡рд╕реНрддреБ рдмрдирд╛рдирд╛

рдмрдирд╛рдПрдБ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдХреЛрдб рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реИ:
 Handle<Value> create(const Arguments& args) { HandleScope scope; Handle<Object> ret = Object::New(); node::Buffer *buf; buf = node::Buffer::New((char *)mysql_init(NULL), sizeof(MYSQL)); ret->SetHiddenValue(String::NewSymbol("MYSQL"), buf->handle_); ret->SetHiddenValue(String::NewSymbol("connected"), Boolean::New(0)); ret->Set(String::NewSymbol("connect"), FunctionTemplate::New(connect)->GetFunction()); ret->Set(String::NewSymbol("query"), FunctionTemplate::New(query)->GetFunction()); return scope.Close(ret); } 

рдЗрд╕ рдХреЛрдб рдХрд╛ рд░рд┐рдЯрд░реНрди рдорд╛рди рдХрдХреНрд╖рд╛ V8 рдорд╛рди рдХрд╛ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИред рдпрд╣ рд╡рд░реНрдЧ рд╕рднреА рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд╝рдВрдХреНрд╢рдВрд╕, рд╕рд╛рде рд╣реА C ++ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдпрджрд┐ рдЙрдиреНрд╣реЗрдВ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рдирдИ рд░реАрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдП рдЧрдП рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЧреБрдгреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдВрдЧреЗред рдпрд╣рд╛рдВ рд╣рдо, рдЕрдзрд┐рдорд╛рдирддрдГ, рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдХреЛ MYSQL рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд▓рд┐рдП рдЖрд░рдореНрдн рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рдЕрдиреНрдп MySQL рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдФрд░ рдХрд┐рд╕реА рддрд░рд╣ рдЗрд╕реЗ рд╣рдорд╛рд░реА рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдкрд╛рдпрд╛ рдЧрдпрд╛ рдХрд┐ рд╕рднреА, рдмрдлрд░ рдСрдмреНрдЬреЗрдХреНрдЯ, рдЬреЛ рд╕реНрд╡рдпрдВ рдиреЛрдб рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИ, рд╕рдВрд░рдЪрдирд╛ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдерд╛ред рдиреЛрдб :: рдмрдлрд╝рд░ :: рдирдП рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдордиреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрдХрд╛рд░ рдХреА рдПрдХ рдирдИ рд╡рд╕реНрддреБ рдмрдирд╛рдИ рдФрд░ MYSQL рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реНрдб рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдХреЛ рд╡рд╣рд╛рдВ рд░рдЦрд╛ (рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рд▓реМрдЯреЗ рдкрд░рд┐рдгрд╛рдо рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдлрд┐рд░ рд╕реЗ рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рддрд╛, рдЗрд╕рд▓рд┐рдП рдХреБрдЫ рдЬрд╛рдВрдЪреЛрдВ рдХреЛ рдФрд░ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛) ред
MYSQL рдХреЛ рд╣рдорд╛рд░реА рд╡рд╕реНрддреБ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд▓реЗрдХрд┐рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЗрд╕реЗ рдПрдХреНрд╕реЗрд╕ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЫрд┐рдкреЗ рд╣реБрдП рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк SetHiddenValue рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛, рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реЗрдЯ рд╡рд┐рдзрд┐ рдХреЗ рд╕рдорд╛рди рд╣реИ, рдХреЗрд╡рд▓ рдЗрд╕ рддрдереНрдп рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдХрд┐ рдпрд╣ рдПрдХ рдирд┐рдпрдорд┐рдд рд╕рдВрдкрддреНрддрд┐ рдирд╣реАрдВ рдмрдирд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдЫрд┐рдкрд╛ рд╣реБрдЖ рд╣реИ, рдЕрд░реНрдерд╛рддреНред рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рд╕реЗ рджреБрд░реНрдЧрдоред рд╣рдо рдХрдиреЗрдХреНрдЯреЗрдб рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЛ рдПрдХ рдЫрд┐рдкреЗ рд╣реБрдП рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рднреА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдВрдЧреЗ, рдпрд╣ рдмрд╛рдж рдореЗрдВ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЕрдм рд╣рдо рдЗрд╕рдореЗрдВ рдПрдХ V8 рдмреВрд▓рд┐рдпрди рдСрдмреНрдЬреЗрдХреНрдЯ рдбрд╛рд▓реЗрдВрдЧреЗ (рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде)ред рдЬрдм рд╣рдо рджреЛ рдФрд░ рдХрд╛рд░реНрдп рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ : рдХрдиреЗрдХреНрдЯ рдФрд░ рдХреНрд╡реЗрд░реА рдХрд░реЗрдВ ред рдФрд░ рдЕрдВрдд рдореЗрдВ, рд╣рдо рдЕрдкрдиреА рд╡рд╕реНрддреБ рдХреЛ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ рд╕реНрдХреЛрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдмреБрд▓рд╛рддреА рд╣реИред
рдЕрдВрдд рдореЗрдВ, рд╣рдореЗрдВ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдорд┐рд▓рддрд╛ рд╣реИ рдЬреЛ рдПрдХ рдирдИ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддрд╛ рд╣реИ, рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рд╕реЗрд╡рд╛ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рджреЛ рдЫрд┐рдкреЗ рд╣реБрдП рдЧреБрдгреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдФрд░ рджреЛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЧреБрдг рдЬреЛ рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреЗ рд╣реИрдВред
рдпрджрд┐ рдЖрдк рджреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд╛рд░реНрдпреЛрдВ рдкрд░ рд╕реНрдЯрдмреНрд╕ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ:
 console.log(require('./mysql_sync.node').create()); 

рддрдм рд╣рдореЗрдВ рдирд┐рдореНрди рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рддреЗ рд╣реИрдВ:
 { connect: [Function], query: [Function]} 

рд╣рдорд╛рд░реЗ рдореЙрдбреНрдпреВрд▓ рдХреЗ рддрд░реАрдХреЗ

рдЕрдм, рд╣рдо рдЕрдкрдиреЗ рдореЙрдбреНрдпреВрд▓ рдХреЗ рддрд░реАрдХреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ:
рдХрдиреЗрдХреНрдЯ рд╡рд┐рдзрд┐:
 Handle<Value> connect(const Arguments& args) { HandleScope scope; Handle<Object> ret = Object::New(); Handle<Object> err = Object::New(); MYSQL *mysql; bool ok=true; mysql = (MYSQL *)args.Holder()->GetHiddenValue(String::NewSymbol("MYSQL"))-> ToObject()->GetIndexedPropertiesExternalArrayData(); if(args.Length()==4){ for(int i=0; i<4; i++) if(!args[i]->IsString()) ok=false; } else { ok=false; } if(ok == true){ String::AsciiValue host(args[0]->ToString()); String::AsciiValue user(args[1]->ToString()); String::AsciiValue pass(args[2]->ToString()); String::AsciiValue db(args[3]->ToString()); mysql_real_connect(mysql, *host, *user, *pass, *db, 0, NULL, 0); args.Holder()->SetHiddenValue(String::NewSymbol("connected"), Boolean::New(1)); err->Set(String::NewSymbol("id"), Uint32::New(mysql_errno(mysql))); err->Set(String::NewSymbol("text"), String::NewSymbol(mysql_error(mysql))); } else { err->Set(String::NewSymbol("id"), Uint32::New(65535)); err->Set(String::NewSymbol("text"), String::NewSymbol("Incorect parametrs of function")); } ret->Set(String::NewSymbol("err"), err); return scope.Close(ret); } 

рдлрд┐рд░ рдореИрдВ рдкрд╣рд▓реА рдореБрд╢реНрдХрд┐рд▓ рдореЗрдВ рдЖрдпрд╛, рд╣рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╡рд╣ рд╡рд╕реНрддреБ рдирд╣реАрдВ рджреА рдЧрдИ рд╣реИ рдЬрд┐рд╕реЗ рдЗрд╕ рд╡рд┐рдзрд┐ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╡рд╕реНрддреБ рдореЗрдВ рджреЛ рдЫрд┐рдкреЗ рд╣реБрдП рдХреНрд╖реЗрддреНрд░ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдореЗрдВ рдЖрдЧреЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдлрд╝рдВрдХреНрд╢рди рдХреЗ рддрд░реНрдХреЛрдВ рдХреЛ V8 рддрд░реНрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рджреНрд╡рд╛рд░рд╛ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рд╡рд┐рд╡рд░рдг рдореЗрдВ рд╡рд┐рд▓рдВрдм рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдкрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдЙрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рдВрджрд░реНрдн рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЗрд╕реЗ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдерд╛ред рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдзрд╛рд░рдХ () рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рд╣рдореЗрдВ MYSQL рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдЫрд┐рдкрд╛ рд╣реБрдЖ рдХреНрд╖реЗрддреНрд░ рдорд┐рд▓рддрд╛ рд╣реИ рдФрд░ GetIndexedPropertiesExternalArrayData () рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╣рдо рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдПрдХ рд╕рдВрдХреЗрддрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред рдХреЛрдб рдореЗрдВ рдХреБрдЫ рдФрд░ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рдирд╣реАрдВ рд╣реИ; рдХрд┐рддрдиреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдЪреЗрдХ рд╣реИрдВред рдпрджрд┐ рд╕рдм рдХреБрдЫ рд╕рд╣реА рдврдВрдЧ рд╕реЗ mysql_real_connect () рдлрд╝рдВрдХреНрд╢рди рдХрд╣рд▓рд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ mysql рддреНрд░реБрдЯрд┐рдпрд╛рдБ рдорд┐рд▓рддреА рд╣реИрдВ, рдПрдХ рдЧрд▓рдд рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдлрд╝реАрд▓реНрдб рдорд╛рдиреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд╣рд╛рдБ рддреНрд░реБрдЯрд┐рдпрд╛рдБ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдпрджрд┐ рдкреИрд░рд╛рдореАрдЯрд░ рд╡реЗ рдирд╣реАрдВ рд╣реИрдВ рдЬреЛ рд╡реЗ рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдорд╛рд░реА рддреНрд░реБрдЯрд┐ рдХреЛ рдЧрд▓рдд рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред рдлрд┐рд░ рд╣рдо рдЧрд▓рдд рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ "рдСрдмреНрдЬреЗрдХреНрдЯ" рдлрд╝реАрд▓реНрдб рдХреЗ рд░реВрдк рдореЗрдВ рд░рд┐рдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рддреЗ рд╣реИрдВред

рдХреНрд╡реЗрд░реА рд╡рд┐рдзрд┐:
 Handle<Value> query(const Arguments& args) { HandleScope scope; Handle<Object> ret = Object::New(); Handle<Object> err = Object::New(); Handle<Array> rows = Array::New(); Handle <Script> script; Handle<Object> obj_row; node::Buffer *buf; MYSQL *mysql; MYSQL_RES *res; MYSQL_ROW row; MYSQL_FIELD *fields; unsigned int num_fields; bool ok=true; mysql = (MYSQL *)args.Holder()->GetHiddenValue( String::NewSymbol("MYSQL"))->ToObject()->GetIndexedPropertiesExternalArrayData(); if(!args.Holder()->GetHiddenValue(String::NewSymbol("connected"))->BooleanValue()){ err->Set(String::NewSymbol("id"), Uint32::New(65534)); err->Set(String::NewSymbol("text"), String::NewSymbol("You need to connect before any query")); ret->Set(String::NewSymbol("err"), err); ok = false; } if(ok == true){ if(args.Length()!=1){ ok=false; }else{ if(!args[0]->IsString()) ok=false; } if(ok == false){ err->Set(String::NewSymbol("id"), Uint32::New(65535)); err->Set(String::NewSymbol("text"), String::NewSymbol("Incorect parametrs of function")); } } if(ok == true){ String::AsciiValue query(args[0]->ToString()); if(mysql_query(mysql, *query)==0){ res = mysql_store_result(mysql); num_fields = mysql_num_fields(res); fields = mysql_fetch_fields(res); while ( (row = mysql_fetch_row(res)) ){ obj_row = Object::New(); for(unsigned int i=0; i<num_fields; i++){ switch(fields[i].type){ case MYSQL_TYPE_DECIMAL: case MYSQL_TYPE_TINY: case MYSQL_TYPE_SHORT: case MYSQL_TYPE_LONG: case MYSQL_TYPE_LONGLONG: case MYSQL_TYPE_INT24: case MYSQL_TYPE_FLOAT: case MYSQL_TYPE_DOUBLE: obj_row->Set(String::NewSymbol(fields[i].name), Number::New( (row[i])? atof(row[i]):0) ); break; case MYSQL_TYPE_TIMESTAMP: case MYSQL_TYPE_DATE: case MYSQL_TYPE_TIME: case MYSQL_TYPE_DATETIME: case MYSQL_TYPE_YEAR: case MYSQL_TYPE_NEWDATE: script = Script::Compile( String::NewSymbol("")->Concat( String::NewSymbol("")->Concat( String::NewSymbol("new Date(Date.parse('"), String::NewSymbol( (row[i])? row[i]:"" ) ), String::NewSymbol("'))")) ); obj_row->Set(String::NewSymbol(fields[i].name), script->Run()); break; case MYSQL_TYPE_TINY_BLOB: case MYSQL_TYPE_MEDIUM_BLOB: case MYSQL_TYPE_LONG_BLOB: case MYSQL_TYPE_BLOB: if((fields[i].flags & BINARY_FLAG)){ buf = node::Buffer::New(row[i], mysql_fetch_lengths(res)[i]); obj_row->Set(String::NewSymbol(fields[i].name), buf->handle_); break; } default: obj_row->Set(String::NewSymbol(fields[i].name), String::NewSymbol( (row[i])? row[i]:"") ); break; } } rows->Set(rows->Length(),obj_row); } mysql_free_result(res); }; ret->Set(String::NewSymbol("inserted_id"), Uint32::New(mysql_insert_id(mysql))); ret->Set(String::NewSymbol("info"), String::NewSymbol( (mysql_info(mysql)) ? mysql_info(mysql) :"" )); ret->Set(String::NewSymbol("affected_rows"), Uint32::New(mysql_affected_rows(mysql))); err->Set(String::NewSymbol("id"), Uint32::New(mysql_errno(mysql))); err->Set(String::NewSymbol("text"), String::NewSymbol(mysql_error(mysql))); } ret->Set(String::NewSymbol("err"), err); ret->Set(String::NewSymbol("rows"), rows); return scope.Close(ret); } 

рдХреНрд╡реЗрд░реА рдлрд╝рдВрдХреНрд╢рди рд╕реЗ, рдореИрдВ рд╢реБрд░реВ рдореЗрдВ рдЪрдпрди рдХрд╛ рдкреВрд░рд╛ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдФрд░ рдЗрд╕реЗ рдПрдХ рдмрд╛рд░ рдореЗрдВ рдПрдХ рдкрдВрдХреНрддрд┐ рд╕реЗ рдмрд╛рд╣рд░ рдирд╣реАрдВ рдирд┐рдХрд╛рд▓рдирд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдЖрдиреЗ рд╡рд╛рд▓реЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рднреА рдЬрд╛рдВрдЪ рдХреЗ рдмрд╛рдж, рдФрд░ рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рд╣рдо рдЕрдиреБрд░реЛрдз рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ V8 рдПрд░реЗ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд░реЗрдЦрд╛ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рджрд░реНрдЬ рдХреА рдЬрд╛рддреА рд╣реИ, рдЬрд┐рд╕рдХреЗ рдЧреБрдг рдирд╛рдо рдХреНрд╡реЗрд░реА рдкрд░рд┐рдгрд╛рдо рдХреЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рдирд╛рдо рд╣реИрдВ, рдФрд░ рдореВрд▓реНрдп рдкреНрд░рд╛рдкреНрдд рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдбреЗрдЯрд╛ рд╣реИрдВред рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рдореИрдВрдиреЗ рдРрд╕рд╛ рдХрд┐рдпрд╛ рдерд╛, рд╕рднреА рдбреЗрдЯрд╛ рдХреЛ V8 рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рддрдм рдореИрдВ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдкрд░рд┐рдгрд╛рдо рдЪрд╛рд╣рддрд╛ рдерд╛ред
рдирддреАрдЬрддрди, рдпрд╣ рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рдХрд┐ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдХреНрд╖реЗрддреНрд░:
рдПрдХ V8 рдирдВрдмрд░ рдХреЗ рд▓рд┐рдП рдбрд╛рд▓реА рдЬрд╛рддреА рд╣реИрдВ рдЬреЛ рдПрдХ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИред

рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдлрд╝реАрд▓реНрдб:
рдмрд╛рдЗрдирд░реА рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рддреА рд╣реИ рдФрд░ рдпрджрд┐ рдпрд╣ рдПрдХ рдмрд╛рдЗрдирд░реА BLOB'y рд╣реИ рддреЛ рдмрдлрд╝рд░ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛ рдЬрд╛рддреА рд╣реИ, рдпрджрд┐ V8 рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдирд╣реАрдВ рд╣реИред

рдФрд░ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдХреНрд╖реЗрддреНрд░:
рд╡реА 8 рджрд┐рдирд╛рдВрдХ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ред рдФрд░ рдпрд╣рд╛рдБ рдПрдХ рд░реЛрдбрд╝рд╛ рдмрди рдЧрдпрд╛ред V8 рджрд┐рдирд╛рдВрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдпреВрдирд┐рдХреНрд╕ рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк рдХреЛ рдкрд╛рд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдФрд░ mysql YYYY-MM-DD HH: MM: SS рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдПрдХ рдлрд╝реАрд▓реНрдб рджреЗрддрд╛ рд╣реИред рдореИрдВ рд▓рд╛рдЗрди рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдФрд░ рдЖрдЧреЗ рд░реВрдкрд╛рдВрддрд░рдг рд▓рд┐рдЦрдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдЙрд╕реА рд╕рдордп, рдореБрдЭреЗ рдпрд╛рдж рдЖрдпрд╛ рдХрд┐ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдпреВрдирд┐рдХреНрд╕ рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреНрд░рд╡реЗрд╢ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИред рдФрд░ рдЪреВрдВрдХрд┐ V8 рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рди рдХрд░реЗрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕реНрдХреНрд░рд┐рдкреНрдЯ :: рдХрдВрдкрд╛рдЗрд▓ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ V8 рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреНрд▓рд╛рд╕ рдХрд╛ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд╣рдо рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдиреНрдпреВ рдбреЗрдЯ (Date.parse (mysql_field_value)) рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ ред рдлрд┐рд░ рд╣рдо рд░рди () рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рд╡рд╕реНрддреБ рдкрд░ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧреАред рдФрд░ рд╣рдо, рдмрджрд▓реЗ рдореЗрдВ, рдЗрд╕реЗ рд╣рдорд╛рд░реА рд╡реА 8 рдПрд░реЗ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ рдбрд╛рд▓рддреЗ рд╣реИрдВред рд╢рд╛рдпрдж рдмрд╣реБрдд рд╕реБрдВрджрд░ рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдХрд╛рдлреА рджрд┐рд▓рдЪрд╕реНрдкред
рдЕрдм рдпрд╣ рд╕рдм рд╕рдВрдХрд▓рд┐рдд рдХрд░рдирд╛ рдмрд╛рдХреА рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдПрдХ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ.рдЧрд╛рдЗрдк рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
 { "targets": [ { "target_name": "mysql_sync", "sources": [ "mysql_sync.cc" ], "include_dirs": [ '/server/daemons/mysql/include/mysql/' ], "link_settings": { 'libraries': ['-lmysqlclient -L/server/daemons/mysql/lib/mysql/'], 'library_dirs': ['/server/daemons/mysql/lib/mysql/'], }, } ] } 
рдореИрдВ рдЖрдкрдХреЛ рдЗрд╕ рддрдереНрдп рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣рд╛рдВ рдЕрдЬреАрдм рддрд░реАрдХреЗ рдЗрдВрдЧрд┐рдд рдХрд┐рдП рдЧрдП рд╣реИрдВ (рд╡реЗ рд╢рд╛рдпрдж рдЖрдкрдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ рд╣реЛрдВрдЧреЗ), рддрд╛рдХрд┐ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХреЗрдВ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХреЗрдВ:
mysql_config --include --libs
рдЕрдм рдЗрд╕ рдкрд░ рдЕрдорд▓ рдХрд░рдирд╛ рдмрд╛рдХреА рд╣реИ:
node-gyp configure
node-gyp build
cp build/Release/mysql_sync.node ./
рд╣рдорд╛рд░рд╛ рдореЙрдбреНрдпреВрд▓ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИ, рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рд▓рд┐рдЦреЗрдВрдЧреЗ:
 var mysql = require('./mysql_sync.node').create(); console.log(mysql.connect("localhost", "login", "pass", "test")); console.log(mysql.query("select * from tmp"); 

рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдРрд╕рд╛ рдХреЛрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛, рдбреЗрдЯрд╛рдмреЗрд╕ рдФрд░ рддрд╛рд▓рд┐рдХрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдХреБрдЫ рдРрд╕рд╛ рдорд┐рд▓реЗрдЧрд╛ред
 { err: { id: 0, text: '' } } { inserted_id: 0, info: '', affected_rows: 1, err: { id: 0, text: '' }, rows:[ { number: 1558.235, varchar: 'test1', text: 'blob text2, blod: <SlowBuffer 31>, date: Wed Oct 03 2012 00:00:00 GMT+0400 (MSK), boolean: 1, tst: <SlowBuffer > } , { number: 2225, varchar: 'test2', text: 'blob text2, blod: <SlowBuffer 32>, date: Wed Oct 04 2012 00:00:00 GMT+0400 (MSK), boolean: 0, tst: <SlowBuffer > } ] } 
рдХреЗ рд╕рд╛рде рдмрдирд╛рдИ рдЧрдИ рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдгрд╛рдо:
 CREATE TABLE `tmp` ( `number` double NOT NULL default '0', `varchar` varchar(10) NOT NULL default '', `text` text NOT NULL, `blod` longblob NOT NULL, `date` datetime NOT NULL default '0000-00-00 00:00:00', `boolean` tinyint(1) NOT NULL default '0', `tst` longblob ) 


рдкрд░рд┐рдгрд╛рдо:


  1. рд╣рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдореЙрдбреНрдпреВрд▓ рддреИрдпрд╛рд░ рд╣реИ, рдпрд╣ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд╣ рд╣реИ рдЬреЛ рд╣рдореЗрдВ рдЪрд╛рд╣рд┐рдП, рдХрднреА-рдХрднреА рдпрд╣ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ
  2. Node.js рдХреЗ рд▓рд┐рдП C ++ рдореЗрдВ рдЕрдкрдиреЗ рдЦреБрдж рдХреЗ рдореЙрдбреНрдпреВрд▓ рд▓рд┐рдЦрдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рд╕реАрдЦрд╛
  3. рд╣рдордиреЗ рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдордирдорд╛рдирд╛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдХреЙрд▓ рдХрд░рдирд╛ рд╕реАрдЦрд╛
  4. рд╣рдо рдХрд┐рд╕реА рдЕрдиреНрдп рдореЙрдбреНрдпреВрд▓ рдХреЛ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рд╣рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
  5. V8 рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде рдЕрдиреБрднрд╡ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛

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

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


All Articles