ShareJS рдпрд╛ OT рдФрд░ NodeJS рдХреЗ рд╕рд╛рде рдЕрдкрдирд╛ Google Wave рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдП



рдУрдЯреА рдкрд░ рджреЛ рд╕рд╛рд▓ рдХреЗ рдХрд╛рдо рдХреЗ рдмрд╛рдж (Google рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдЯрдХрд░рд╛рд╡ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддрдХрдиреАрдХ), рд╡реЗрд╡ рдХреЗ рд▓рд┐рдП, рдЬреЛрд╕реЗрдл (рдЬреЛрд╕реЗрдл рдЬреЗрдВрдЯрд▓) рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдХреЗ рд╕рд╛рде рдЖрдП рдХрд┐ рдЬреЛ рд▓реЛрдЧ рдПрдХ рд╕рдорд╛рди рдЙрддреНрдкрд╛рдж рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рд▓рдЧрднрдЧ рдХрдо рд╕рдордп рд▓рдЧреЗрдЧрд╛ред рдХрд┐рд╕реА рддрд░рд╣ рдЗрди рд▓реЛрдЧреЛрдВ рдХреА рдорджрдж рдХрд░рдиреЗ рдФрд░ рдЬреНрдЮрд╛рди рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ShareJS рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рд▓рд┐рдЦрд╛ рдЧрдпрд╛, рдЬреЛ рдХрд┐ NodeJS рдкрд░ рдЖрдзрд╛рд░рд┐рдд OT рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред рдПрдХ C рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рднреА рд╣реИ ред




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



рдУрдЯреА рдСрдкрд░реЗрд╢рдирд▓ рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдореЗрд╢рди рдпрд╛ рдСрдкрд░реЗрд╢рдирд▓ рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдореЗрд╢рди рд╣реИред
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдбреЗрдЯрд╛ рд╣реИ рдФрд░ рдЗрд╕ рдбреЗрдЯрд╛ рдкрд░ рдСрдкрд░реЗрд╢рди рд╣реИрдВред рд╕рдВрдЪрд╛рд▓рди рдмрд╛рд░реА-рдмрд╛рд░реА рд╕реЗ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЖрддреЗ рд╣реИрдВред рдкреВрд░реЗ рдмрд┐рдВрджреБ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдЖрдк рдбреЗрдЯрд╛ рдкрд░ рдЦреБрдж рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ, рд╡рд░реНрддрдорд╛рди рдбреЗрдЯрд╛ рдкрд░ рд╕рднреА рдкрд┐рдЫрд▓реЗ рдСрдкрд░реЗрд╢рдиреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдСрдкрд░реЗрд╢рди рд╕реНрд╡рдпрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИред

рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рд╕реЗ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЙрджрд╛рд╣рд░рдг:




рд╢реБрд░реБрдЖрддреА рд╕рдордп рдореЗрдВ, рджреЛрдиреЛрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдкрд╛рд╕ рд╕реНрдЯреНрд░рд┐рдВрдЧ 'рдПрдмреАрд╕реА' рд╣реИ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╡реЗ рдПрдХ рд╕рд╛рде рджреЛ рдСрдкрд░реЗрд╢рди рдмрдирд╛рддреЗ рд╣реИрдВ:
O1 = рдбрд╛рд▓реЗрдВ [0, "x"] (рд╕реНрдерд┐рддрд┐ "x" рдЕрдХреНрд╖рд░ рдХреЛ рдбрд╛рд▓реЗрдВ "0")
O2 = рд╣рдЯрд╛рдПрдВ [2, "c"] (рд╕реНрдерд┐рддрд┐ "c" рдХреЛ рд╣рдЯрд╛рдПрдВ "2")

рдЗрди рдСрдкрд░реЗрд╢рдиреЛрдВ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдЖрджреЗрд╢ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдкрд░рд┐рдгрд╛рдо рдЕрд▓рдЧ рд╣реЛрдЧрд╛ред
рдпрджрд┐ O2, O1, рддреЛ 'abc' -> 'ab' -> 'xab'
рдпрджрд┐ O1, O2, рддреЛ 'abc' -> 'xabc' -> 'xac'

рд╣рдо рджреЛрдиреЛрдВ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдПрдХ рд╣реА xab рдкрд░рд┐рдгрд╛рдо рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗ? рдкрд┐рдЫрд▓реЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП, рд╕рдВрдЪрд╛рд▓рди рдмрджрд▓реЗрдВ? рдпрд╣ рдУрдЯреА рдХреЗ рд╕рд╛рде рдХреИрд╕рд╛ рджрд┐рдЦреЗрдЧрд╛?

O2: 'abc' -> 'ab'
OT: O1 рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░реЗрдВ [0, "x"] -> O1` рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░реЗрдВ [0, "x"]
O1`: 'ab' -> 'xab'
рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдСрдкрд░реЗрд╢рди O1 рдФрд░ O1` рд╕рдорд╛рди рд╣реИрдВ (рдбрд╛рд▓реЗрдВ [0, "x"]) рдХреНрдпреЛрдВрдХрд┐ рдкрд┐рдЫрд▓реЗ рдСрдкрд░реЗрд╢рди O2 рдореЗрдВ O1 рдХреА рд╕реНрдерд┐рддрд┐ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╕реНрдерд┐рддрд┐ рдкрд░ рдЕрдзрд┐рдХ рдкреНрд░рддреАрдХ рдереЗред рдЗрд╕ рдкреНрд░рдХрд╛рд░, O2 O1 рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдмрджрд▓рддрд╛ рдирд╣реАрдВ рд╣реИред

O1: 'abc' -> 'xabc'
OT: O2 рд╣рдЯрд╛рдПрдВ [2, "c"] -> O2` рд╣рдЯрд╛рдПрдВ [3, "c"]
O2`: 'xabc' -> 'xab'
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдУрдЯреА рдиреЗ рдЗрд╕ рдмрд╛рдд рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрд╛ рдХрд┐ рдУ 2 рд╕реЗ рдкрд╣рд▓реЗ рд╣реА рдПрдХ рдСрдкрд░реЗрд╢рди рдУ 1 рдерд╛, рдЬрд┐рд╕рдиреЗ рдУ 2 рдХреЗ рд▓рд┐рдП рд╕реНрдерд┐рддрд┐ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рдЪрд░рд┐рддреНрд░ рдбрд╛рд▓рд╛ рдерд╛, рдФрд░ рдЗрд╕рд▓рд┐рдП рдУ 2 рдХреЛ рд╕реНрдерд┐рддрд┐ 2 рд╕реЗ рдирд╣реАрдВ рд╣рдЯрд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рд╕реНрдерд┐рддрд┐ 3 рд╕реЗред рдпрд╣ рд╕рдм рдЬрд╛рджреВ рд╣реИред

OT рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдкрдврд╝реЗрдВ: рд╡рд┐рдХреА , FAQ

рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░



рдУрдЯреА рдореЗрдВ, рдмрд╣реБрдд рдХреБрдЫ рдбреЗрдЯрд╛ рдХреЗ рдкреНрд░рдХрд╛рд░ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдЖрдЦрд┐рд░рдХрд╛рд░, рд╡рд┐рднрд┐рдиреНрди рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдСрдкрд░реЗрд╢рди (рд╕рд╛рде рд╣реА рдУ_рдУ рдСрдкрд░реЗрд╢рдВрд╕ рдкрд░ рд╕рдВрдЪрд╛рд▓рди) рдЕрд▓рдЧ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд╕рднреА рдСрдкрд░реЗрд╢рди рдЕрдВрддрддрдГ рдХреЗрд╡рд▓ 3 рддрдХ рдХрдо рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ:
- рдЧрд╛рдбрд╝реА рдХреЛ n рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд▓реЗ рдЬрд╛рдПрдВ
- рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдкрдВрдХреНрддрд┐ n рдбрд╛рд▓реЗрдВ
- рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдПрди рдЕрдХреНрд╖рд░ рд╣рдЯрд╛рдПрдВ
рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рджреЛ:
- рд╕реНрдерд┐рддрд┐ n рдкрд░ рдкрдВрдХреНрддрд┐ рдбрд╛рд▓реЗрдВ
- рд╕реНрдерд┐рддрд┐ n рдкрд░ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ m рд╡рд░реНрдг рд╣рдЯрд╛рдПрдВ

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

ShareJS рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдПрдХ рдЕрд▓рдЧ OTTypes рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИред рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдФрд░ рдЬреЛрдВрд╕ рдХреЗ рд▓рд┐рдП рдХрдИ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИрдВред рдпреЛрдЬрдирд╛рдПрдБ рдПрдХ рдЕрдореАрд░-рдкрд╛рда рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рд╣реИрдВред

Arihtektura



ShareJS рдореЗрдВ рд╕рд░реНрд╡рд░ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рднрд╛рдЧ рд╣реЛрддреЗ рд╣реИрдВред рдХреЛрдб рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рдкрд░рд┐рд╡рд░реНрддрди) isomorphic рд╣реИ, рдЕрд░реНрдерд╛рдд, рдпрд╣ рд╕рд░реНрд╡рд░ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рджреЛрдиреЛрдВ рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдСрдкрд░реЗрд╢рди рд╕реНрдЯреЛрд░ LiveDB рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ Mongo (рдбреЗрдЯрд╛) рдФрд░ Redis (рдСрдкрд░реЗрд╢рди рдХреИрд╢) рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдбреЗрдЯрд╛ рдореЙрдбрд▓ - рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдЙрдиреНрдореБрдЦ - рд╕рдВрдЧреНрд░рд╣ рдФрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ред рдкреНрд░рддреНрдпреЗрдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рдПрдХ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдФрд░ рд╕рдВрд╕реНрдХрд░рдг рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рд╣рд░ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд╕рд╛рде рдмрдврд╝рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╕реНрддрд░ рдкрд░ рд╕рдВрдЪрд╛рд▓рди рдкрд░рдорд╛рдгреБ рд╣реИрдВред
рдХреНрд▓рд╛рдЗрдВрдЯ рдХрдИ рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдСрдкрд░реЗрд╢рди рдХрд░рддрд╛ рд╣реИред рдЙрдиреНрд╣реЗрдВ рд╕рдореВрд╣реАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рд╕реЗрдЯрдЯрд╛рдЗрдордЖрдЙрдЯ (sendToServer, 0);), рд╕рдВрдкреАрдбрд╝рд┐рдд (рдХреНрд░рдорд┐рдХ рд╕рдорд╛рди рд╡рд╛рд▓реЗ рд╕рдВрдпреБрдХреНрдд рд╣реЛрддреЗ рд╣реИрдВ, рдЬреЛ рдПрдХ рджреВрд╕рд░реЗ рдХреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЛ рдмреЗрдЕрд╕рд░ рдХрд░ рджреЗрддреЗ рд╣реИрдВ) рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдПрдХ рднреАрдбрд╝ рдореЗрдВ рд╕рд░реНрд╡рд░ рдХреЛ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдпрджрд┐ рдСрдкрд░реЗрд╢рди рдбреЗрдЯрд╛ рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдбреЗрдЯрд╛ рдХреЗ рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ, рддреЛ рдСрдкрд░реЗрд╢рди рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рд╕рд░реНрд╡рд░ рдкрд╣рд▓реЗ рд░реЗрдбрд┐рд╕ рдореЗрдВ рдордзреНрдпрд╡рд░реНрддреА рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдЗрддрд┐рд╣рд╛рд╕ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ, рдлрд┐рд░ рдореЛрдВрдЧреЛ рдореЗрдВ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рднрдВрдбрд╛рд░ рднреА)ред рдСрдкрд░реЗрд╢рди рдХреЛ рдордзреНрдпрд╡рд░реНрддреА рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдбреЗрдЯрд╛ рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред Redis (Lua рд╕реНрдХреНрд░рд┐рдкреНрдЯ) рдореЗрдВ рдкрд░рд┐рдЪрд╛рд▓рди рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рд╕реНрд╡рдпрдВ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ (рд▓реЗрди-рджреЗрди) рд╣реЛрддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рд╕реЗ рдбреЗрдЯрд╛ рд╕рдВрд╕реНрдХрд░рдг рдХреА рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХрддрд╛ рдХреА рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рддреА рд╣реИ, рдпрджрд┐ рд╕рдВрд╕реНрдХрд░рдг рдЕрдм рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдирд╣реАрдВ рд╣реИ, рддреЛ рд╕рд░реНрдХрд▓ рдлрд┐рд░ рд╕реЗ рджреЛрд╣рд░рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
Redis PubSub рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдбреЗрдЯрд╛ рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдШрдЯрдирд╛рдУрдВ рдХреЛ рдкрдХрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдордзреНрдпрд╡рд░реНрддреА рдСрдкрд░реЗрд╢рди рд╕рднреА рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рднреЗрдЬреЗ рдЬрд╛рддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред
рдпрд╣ рдореЙрдбрд▓ рдЖрдкрдХреЛ рдПрдХ рддрд░рдл рд▓рдЧрд╛рддрд╛рд░ рдбреЗрдЯрд╛, рдФрд░ рджреВрд╕рд░реА рддрд░рдл рдЙрдЪреНрдЪ рдЧрддрд┐ рдФрд░ рдорд╛рдкрдиреАрдпрддрд╛ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

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

рдЖрд╡реЗрджрди



ShareJS рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдбреЗрдЯрд╛ рд╕рд╛рдЭрд╛рдХрд░рдг рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЬреИрд╕реЗ Google Wave, Google рдбреЙрдХреНрд╕ рдЖрджрд┐ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИред
ShareJS - RacerJS рдкрд░ рдПрдХ рд░реИрдкрд░ рд╣реИред рдпрд╣ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрдВрджрд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИред рдЧреНрд░рд╛рд╣рдХ рдЪреМрдЦрдЯреЗ (AngularJS, Backbone, рдЖрджрд┐) рдХреЗ рд╕рд╛рде рджреМрдбрд╝рдиреЗ рд╡рд╛рд▓реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред
рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рд╕рдм рдХреБрдЫ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рддреБрд░рдВрдд рдбрд░реНрдмреАрдЬреЗрдПрд╕ рд╣реИ ред рдпрд╣ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдореЙрдбрд▓ рдХреЗ рд░реВрдк рдореЗрдВ RacerJS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдкреВрд░реНрдг-рд╕реНрдЯреИрдХ рдЖрдЗрд╕реЛрдореЛрд░реНрдлрд┐рдХ рд░реВрдкрд░реЗрдЦрд╛ рд╣реИред

ShareJS, RacerJS, DerbyJS рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд╡рд╛рд▓ рд╕реНрдЯреИрдХрд╡реЙрдЯрд░рдлрд╝реНрд▓реЛ рдЪреИрдЯ (Stackoverflow> 20 рдкрд░ рдПрдХ рдкреНрд░рддрд┐рд╖реНрдард╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛) рд╕реЗ рдкреВрдЫреЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ

рдбрд░реНрдмреАрдЬреЗрдПрд╕ рд╕рд╛рдордЧреНрд░реА

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


All Articles