Node.js рдФрд░ Redis рдкрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реВрдЪрдирд╛рдПрдВ рд▓рдВрдмрд┐рдд

рдХрд╛рд░реНрдп рд╡рд┐рд╡рд░рдг

рдЕрдХреНрд╕рд░, рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбреЗрд╡рд▓рдкрд░реНрд╕, рд╕рд╛рде рд╣реА рд╕рд╛рде рдореЛрдмрд╛рдЗрд▓ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреЗ рд▓рд┐рдП рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рдкрд╛рд╕ рдХрд┐рд╕реА рдИрд╡реЗрдВрдЯ рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреА рд╕реВрдЪрдирд╛рдПрдВ рднреЗрдЬрдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рд╣реЛрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: рдХрд┐рд╕реА рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдореАрдЯрд┐рдВрдЧ рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░реЗрдВ, рдХреЙрд▓ рдХрд░реЗрдВ, рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╢реЗрдбреНрдпреВрд▓ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ (рдЯреВрдбреВ рд╢реАрдЯ), рдпрд╛ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдХрд┐рд╕реА рдЕрдиреНрдп рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреА рдпрд╛рдж рджрд┐рд▓рд╛рдПрдВред


рдпрджрд┐ рдЗрд╕реА рддрд░рд╣ рдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕рд╛рдорд╛рдЬрд┐рдХ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИрдВред рдиреЗрдЯрд╡рд░реНрдХ, рдлрд┐рд░ рд╕реАрдзреЗ рд╕реВрдЪрдирд╛рдПрдВ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП, VKontakte рдиреЗрдЯрд╡рд░реНрдХ рдЗрд╕рдХреЗ рд▓рд┐рдП safe.sendNotification рд╡рд┐рдзрд┐ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ;
рд╕рд╣рдкрд╛рдард┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП: рд╕реВрдЪрдирд╛рдПрдВ ред
рдФрд░ Apple рдФрд░ Android рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣ рдХреА рд╕реВрдЪрдирд╛рдПрдВ рдХреНрд░рдорд╢рдГ Apple Push Notification Service рдФрд░ Android Cloud рд╕реЗ Device Messaging (C2DM) рддрдХ рднреЗрдЬреА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВред

рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдХрд░рдгреЛрдВ рдХрд╛ рд╡рд┐рдХрд▓реНрдк

рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рджреЛ рдЕрдЪрд▓ рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХрд╛ рдЪрдпрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:
Node.js (0.6.x) рдФрд░ рд░реЗрдбрд┐рд╕ред рдкреНрд▓рд╕ рдкреНрд░рд╛рдкреНрдд рдФрд░ рднреЗрдЬреЗ рдЧрдП рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдЬреНрдЮрд╛ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрджрд┐рдо UI рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡реНрдпрдХреНрдд рдХрд░рддреЗ рд╣реИрдВред

рдкрд╣рд▓реЗ рдХреНрд▓рд╕реНрдЯрд░ рдореЙрдбреНрдпреВрд▓ (0.6 рдореЗрдВ рд╢рд╛рдорд┐рд▓) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рднреА рдХреЛрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╢рд╛рдорд┐рд▓ рдереА, Node.js рд╕рдВрд╕реНрдХрд░рдг 0.4 рдХреНрд▓рд╕реНрдЯрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдХреНрд▓рд╕реНрдЯрд░ рдкреИрдХреЗрдЬ рдХреЗ рд░реВрдк рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред

рд░реЗрдбрд┐рд╕ рдХреЛ рд╡рд┐рднрд┐рдиреНрди рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛, рдЬреЛ рдХрд┐ рдмреЙрдХреНрд╕ рдХреЗ рдареАрдХ рдмрд╛рд╣рд░ рд╣реИ (рдЙрд╕реА рдореЗрдореЗрдЪреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ)ред рд╕рд╛рде рд╣реА рдХрд╛рд░реНрдп рдХрддрд╛рд░реЛрдВ рдХреЗ рдЖрдпреЛрдЬрди рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЖрджреЗрд╢реЛрдВ рдХреА рдЙрдкрд▓рдмреНрдзрддрд╛ред рдФрд░ рдпрд╣ рднреА рдХреНрдпреЛрдВрдХрд┐ Youporn.com рдЕрдм 100% рд░реЗрдбрд┐рд╕ рд╕рд╛рдЗрдЯ рд╣реИ

рдХреЛрд░ рдПрдкреАрдЖрдИ

server_name / send_delayed - рд╡рд┐рд▓рдВрдмрд┐рдд рдЕрдзрд┐рд╕реВрдЪрдирд╛ (GET рдФрд░ POST рджреЛрдиреЛрдВ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ)


server_name / user_online - рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдШрдЯрдирд╛ рд▓реЗ рд▓реЛ (рдпрджрд┐ рд╕рдордп рдЖ рдЧрдпрд╛ рд╣реИ) рдФрд░ рднреЗрдЬреЗрдВ


рдРрдк рдбрд┐рдЬрд╛рдЗрди
рдХрддрд╛рд░ рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рд╕рдВрд░рдЪрдирд╛рдПрдВ:
рд╕рдВрджреЗрд╢ рдХрддрд╛рд░ - SORTEDSET рдЬрд┐рд╕рдореЗрдВ рд░реИрдВрдХ рдШрдЯрдирд╛ рдХрд╛ рд╕рдордп рд╣реЛрдЧрд╛;
рдСрдирд▓рд╛рдЗрди рд╕рдВрджреЗрд╢реЛрдВ рдХреА рдХрддрд╛рд░ - рдкреНрд░рддреНрдпреЗрдХ рдпреВрдЖрдИрдбреА рдХреЗ рд▓рд┐рдП SORTEDSET рдЕрд▓рдЧ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд░реИрдВрдХ рдШрдЯрдирд╛ рдХрд╛ рд╕рдордп рд╣реЛрдЧрд╛;
рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдХрддрд╛рд░ - рд╕реВрдЪреА - рдпрджрд┐ рдпрд╣ рд╕рдВрджреЗрд╢ рдЗрд╕ рд╕реВрдЪреА рдореЗрдВ рд╣реИ, рддреЛ рд╕рдВрджреЗрд╢ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдорд╛рд╕реНрдЯрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛

1. рд╕рд░реНрд╡рд░ рдкрд░ рдХреЛрд░ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдмрд░рд╛рдмрд░ рдХрдИ рд╢реНрд░рдорд┐рдХреЛрдВ рдХреЛ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ;
2. рдЖрд░рдИрдкреАрдПрд▓ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ;
3. рдПрдХ рд╕рдВрджреЗрд╢ рдХрддрд╛рд░ рд╕реНрдХреИрдирд░ рд▓реЙрдиреНрдЪ рдХрд░рддрд╛ рд╣реИ ( рдСрдирд▓рд╛рдЗрди рд╕рдВрджреЗрд╢ рдХрддрд╛рд░ рд╕реНрдХреИрди рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИ);
4. рд╢реНрд░рдорд┐рдХреЛрдВ рдХреЗ рдкрддрди рдкрд░ рдирдЬрд╝рд░ рд░рдЦрддрд╛ рд╣реИ рдФрд░ рдЧрд┐рд░рд╛рд╡рдЯ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдкреБрдирдГ рдЖрд░рдВрдн рдХрд░рддрд╛ рд╣реИред
5. рдкреВрд░реНрдг рдЧрд┐рд░рд╛рд╡рдЯ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдШрдЯрдирд╛рдУрдВ рд╕реЗ рд╕рдВрджреЗрд╢ рдХрддрд╛рд░ рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ;
6. рдЖрдБрдХрдбрд╝реЛрдВ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпреВрдЖрдИ рд╕рд░реНрд╡рд░ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИред

рд╕реНрдХреИрдирд░ рд╡рд░реНрддрдорд╛рди рд╕рдордп рд╕реЗ рд░рд┐рд╡рд░реНрд╕ рдСрд░реНрдбрд░ рдореЗрдВ 100 рдХреЗ рдмрд░рд╛рдмрд░ рд░рд╛рд╢рд┐ рдореЗрдВ рд╕рдВрджреЗрд╢ рдХрддрд╛рд░ рд╕реЗ ZREVRANGEBYSCORE рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдШрдЯрдирд╛рдУрдВ рдХрд╛ рдПрдХ рдкреИрдХреЗрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред рд▓реЗрди-рджреЗрди рдореЗрдВ, рдЙрдиреНрд╣реЗрдВ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХрддрд╛рд░ рдореЗрдВ рд░рдЦрддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕рдВрджреЗрд╢ рдХрддрд╛рд░ рд╕реЗ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИред

рдЕрд▓рдЧ рдХрд╛рдо рдХрд░рдиреЗрд╡рд╛рд▓рд╛

1. send_delayed рдпрд╛ user_online рдХрдорд╛рдВрдб рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдпреЗ рдШрдЯрдирд╛рдПрдБ JSON.stringify рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдЪрдПрдПрд╕рдПрдЪ рдореЗрдВ рдЬреЗрдПрд╕рдПрди рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рджрд░реНрдЬ рдХреА рдЬрд╛рддреА рд╣реИрдВред Msgpack рдореЗрдВ рдЗрд╡реЗрдВрдЯ рд╕реНрдЯреЛрд░реЗрдЬ рдХреА рднреА рдХреЛрд╢рд┐рд╢ рдХреА рдЧрдИ рд╣реИред рдпрджреНрдпрдкрд┐ рдЙрдкрд░реЛрдХреНрдд рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдпрд╣ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдпрд╣ рддреЗрдЬ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рд╕рд░рд▓ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП рдЧрддрд┐ рдореЗрдВ рдХреЛрдИ рд╡реГрджреНрдзрд┐ рдирд╣реАрдВ рд╣реБрдИ рдереАред рдШрдЯрдирд╛ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдШрд░ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдПрдХ рд╕рдВрджреЗрд╢ рдХрддрд╛рд░ рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИред рдШрдЯрдирд╛ рдХреА рдкреНрд░рддреНрдпреЗрдХ рдХреБрдВрдЬреА рдХреЗ рд▓рд┐рдП, рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдордп + рджреЗрд░реА рдХреЗ рдмрд░рд╛рдмрд░ рдПрдХ рдЬреАрд╡рдирдХрд╛рд▓ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

2. рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдХрддрд╛рд░ рд╕реНрдХреИрдирд░ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛
рд╕реНрдХреИрдирд░ BLPOP рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ LIST рд╕реЗ рдИрд╡реЗрдВрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ (рдХреЗрд╡рд▓ рдЙрдиреНрд╣реЗрдВ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрдм рд╡реЗ рдХрддрд╛рд░ рдореЗрдВ рд╣реЛрддреЗ рд╣реИрдВ)ред рдпрджрд┐ рдЖрдк рд╕рд░реНрд╡рд░ рдореЗрдВ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде MONITOR рдХрдорд╛рдВрдб рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рд▓реЙрдЧ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:

1336484301.674405 "zrevrangebyscore" "actual_queue_test-queue" "1336484301673" "-inf" "limit" "0" "100"
1336484301.675102 "zrevrangebyscore" "actual_queue_test-queue" "1336484301674" "-inf" "limit" "0" "100"
1336484301.675387 "zrevrangebyscore" "actual_queue_test-queue" "1336484301675" "-inf" "limit" "0" "100"


// fill processing queue
Worker.prototype.fetch = function(fn) {
var self = this;
this.client.zrevrangebyscore(this.queue_key, Date.now(),
"-inf", "limit", 0, self.pack, function(err, reply) {
process.nextTick(function() {
self.fetch();
}); // re-schedule fetch
...


рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рд░ рдмрд╛рд░ рдЬрдм рд╣рдо рдЕрдЧрд▓реЗ рдЯрд┐рдХ рдкрд░ рд▓рд╛рддреЗ рд╣реИрдВред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрдЧрд░ рдХрддрд╛рд░ рдореЗрдВ рдХреЛрдИ рдШрдЯрдирд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдкреНрд░рддреНрдпреЗрдХ рдЯрд┐рдХ рдкрд░ рдЗрд╕реЗ рдЬрд╛рдВрдЪрдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред
JSON.parse рдХрд░рддрд╛ рд╣реИ, рдЕрдЧрд░ рдЕрдиреБрдкрд╕реНрдерд┐рдд рдпрд╛ (рд╡рд░реНрддрдорд╛рди рд╕рдордп - рдХреБрдВрдЬреА> USER_POLL_THRESHOLD - 30 рдорд┐рдирдЯ) - рд╣рдо рдЕрдВрддрд┐рдо рднреЗрдЬрдиреЗ рдХреА рдХреБрдВрдЬреА рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ - рд╣рдо рдЙрд╕ рдЗрд╡реЗрдВрдЯ-рдбреЗрдЯрд╛ рдИрд╡реЗрдВрдЯ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕ рдкрд░ UrlSender рдПрдХ рдЕрдиреБрд░реЛрдз рднреЗрдЬ рд╕рдХрддрд╛ рд╣реИ, recheck_url рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдпрджрд┐ рдХреЛрдИ рд╣реЛред рдпрджрд┐ http рдЕрдиреБрд░реЛрдз рдкрд░ 200 рдХреЛрдб рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╣рдо рдИрд╡реЗрдВрдЯ 'рдЗрд╡реЗрдВрдЯ- рд╕реЗрдВрдб ' рдХреА рд╢реБрд░реБрдЖрдд рдХрд░рддреЗ рд╣реИрдВ, рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдИрд╡реЗрдВрдЯ рдХреЛ рдорд┐рдЯрд╛ рджреЗрддреЗ рд╣реИрдВ, рд╡рд░реНрддрдорд╛рди рд╕рдордп рддрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдЕрдВрддрд┐рдо рднреЗрдЬрдиреЗ рдХреА рдХреБрдВрдЬреА рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВред

рдСрдирд▓рд╛рдЗрди рдШрдЯрдирд╛рдУрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХреНрд░рдо рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ: рд╣рдо рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдСрдирд▓рд╛рдЗрди рд╕рдВрджреЗрд╢реЛрдВ рдХреА рдПрдХ рдХрддрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, ZREVRANGEBYSCORE рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд┐рдХрдЯрддрдо рдШрдЯрдирд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред рд╣рдо USET_POLL_THRESHOLD_ONLINE рд╕реЗрдЯ рдХрд░рдХреЗ рдЬрд╛рдВрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рднреЗрдЬрдиреЗ рдХрд╛ рд╕рдордп рдЖ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХрддрд╛рд░ рдореЗрдВ рдбрд╛рд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕рдВрджреЗрд╢ рдХрддрд╛рд░ рд╕реЗ рдирд┐рдХрд╛рд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдкрд░реАрдХреНрд╖рдг

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

logger.spec('event-processed'); //only test env
тАж
logger.spec('event-fetched'); //only test env


рдЪрд▓ рд░рд╣реЗ рдкрд░реАрдХреНрд╖рдг:
1. config / settings.test.js рдХреЙрдкреА рдХрд░реЗрдВ -> config / settings.js рдФрд░ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдореЗрдВ рдмрджрд▓реЗрдВ;
2. рд╕рд░реНрд╡рд░ рдкреНрд░рд╛рд░рдВрдн: APP_ENV = рдкрд░реАрдХреНрд╖рдг npm рдкреНрд░рд╛рд░рдВрдн
3. рдЪрд▓ рд░рд╣реЗ рдкрд░реАрдХреНрд╖рдг: APP_ENV = рдкрд░реАрдХреНрд╖рдг рдкреНрд░рддрд┐рдЬреНрдЮрд╛ --spec рдкрд░реАрдХреНрд╖рдг / рд╡рд┐рд▓рдВрдмрд┐рдд-рдЕрдиреБрд░реЛрдз-test.js

рдЯреЗрд╕реНрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЙрджрд╛рд╣рд░рдг (рдорд╛рдгрд┐рдХ)

require 'uri'
require 'net/http'

api_url = "http://127.0.0.1:8000/send_delayed"
url = "http://127.0.0.1:8000/health"
recheck_url = "http://127.0.0.1:8000/recheck_url_correct"
# recheck_url = "http://127.0.0.1:8000/recheck_url_error"
uid=rand(1000)
type="test_common"
delay=1
post_url = URI.parse(api_url)
# res = Net::HTTP.post_form(post_url,{"url" => url, "delay" => delay,
# "uid" => uid, "type" => type, "recheck_url" => recheck_url, "send_than_online" => true})
res = Net::HTTP.post_form(post_url,{"url" => url, "delay" => delay,
"uid" => uid, "type" => type, "recheck_url" => recheck_url})
p res.inspect


рд╕рд╛рдВрдЦреНрдпрд┐рдХреА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ



рд╕рд░реНрд╡рд░ рд╕реНрд░реЛрдд рдХреЛрдб

рдкрд┐рдВрдХреА рджреНрд╡рд╛рд░рд╛ рд╕рд╣-рд▓рд┐рдЦрд┐рдд
https://github.com/catz/actual_queue

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


All Articles