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

рд╕реНрдерд╛рдкрдирд╛ рдФрд░ рд╕реЗрдЯрдЕрдк
рд╣рдо
рд╢рд╛рдлрд╝реНрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдЬреЛ PHP рдХреЛ рд╡реЗрдм рд╕реЙрдХреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдВрдкреЛрдЬрд╝рд░ рдмрдирд╛рдПрдБред рдЬреЛ рдЗрд╕ рдХреЛрдб рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрднрд░рддрд╛ рдФрд░ рдСрдЯреЛрд▓реЙрдб рджреЛрдиреЛрдВ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдЖрдЧреЗ рд▓рд┐рдЦреЗрдВрдЧреЗ:
{ "require": { "cboden/Ratchet": "0.2.*" }, "autoload": { "psr-0": { "LiveScores": "src" } } }
рдЕрдм рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕рдВрд░рдЪрдирд╛ рдмрдирд╛рдПрдБ:
[root] bin src LiveScores public assets css vendor js vendor vendor
рдЖрдк
рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реЗ рд╕рдм рдХреБрдЫ рд▓реЗрдирд╛ рдЪрд╛рд╣ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдХрдИ рдЖрд╡рд╢реНрдпрдХ рд╕реАрдПрд╕рдПрд╕, рдЬреЗрдПрд╕ рдФрд░ рдЫрд╡рд┐рдпрд╛рдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдЗрд╕ рдЧрд╛рдЗрдб рдХреЗ рд╕рднреА рдХреЛрдб рднреА рд╣реИрдВред рдпрджрд┐ рдЖрдк рд╕реНрдХреНрд░реИрдЪ рд╕реЗ рд╕рдм рдХреБрдЫ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдореИрдиреБрдЕрд▓ рдХреЗ рд╕рдорд╛рдирд╛рдВрддрд░, рддреЛ рдХреЗрд╡рд▓
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ / рд╕рдВрдкрддреНрддрд┐ / * / рд╡рд┐рдХреНрд░реЗрддрд╛ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдПрдБред
рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ,
php рдХрдВрдкреЛрдЬрд╝рд░ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рди рднреВрд▓реЗрдВред
рдЕрдкрдбреЗрдЯ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ ред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХрдВрдкреЛрдЬрд╝рд░ рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рд╣реИ, рддреЛ рдЗрд╕реЗ
curl -sS getcomposer.org/installer рдЪрд▓рд╛рдХрд░ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ php ред
рд╣рдо рдПрдХ рд╡рд░реНрдЧ рдмрдирд╛рдХрд░ рд╢реБрд░реВ рдХрд░реЗрдВрдЧреЗ рдЬреЛ рдХрдиреЗрдХреНрд╢рди рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдЧрд╛ рдФрд░ рд╕рдВрджреЗрд╢ рднреЗрдЬреЗрдЧрд╛ред рдмрд╛рдж рдореЗрдВ, рд╣рдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЪрд▓ рд░рд╣реЗ рдЧреЗрдо рдХреЗ рдбреЗрдЯрд╛ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВрдЧреЗред рдпрд╣ рд╕рдВрджреЗрд╢ рджрд▓рд╛рд▓ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдпрд╣ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд░реНрдЧ рдХрд╛ рдЖрдзрд╛рд░ рд╣реИ:
рдпрд╣ рдиреЛрдЯ рдХрд░рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ:
- рд╕рдВрджреЗрд╢ рдмреНрд░реЛрдХрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд░реНрдЧ рдХреЛ MessageComponentInterface рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП
- рд╣рдо рдПрдХ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рднреА рдЬреБрдбрд╝реЗ рд╣реБрдП рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд░рдЦрддреЗ рд╣реИрдВред
- рдЬрдм рдПрдХ рдХреНрд▓рд╛рдЗрдВрдЯ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдСрдирдСрди рдИрд╡реЗрдВрдЯ рдХреЛ рдирд┐рдХрд╛рд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ
- OnClose рд╡рд┐рдзрд┐ рд╡рд┐рдкрд░реАрдд рдХрд░рддреА рд╣реИ
- рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рд╣рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд░ рдмрдирд╛рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рдЕрдЧрд▓рд╛ рдХрджрдо рдПрдХ рдРрд╕рд╛ рдбреЗрдореЙрди рдмрдирд╛рдирд╛ рд╣реИ рдЬреЛ рд╣рдорд╛рд░реА рдХрдХреНрд╖рд╛ рдХреЛ рддреБрд░рдВрдд рдкреНрд░реЗрд░рд┐рдд рдХрд░реЗрдЧрд╛, рдЖрдиреЗ рд╡рд╛рд▓реЗ рдХрдиреЗрдХреНрд╢рдиреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реБрдиреЛред рдПрдХ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ:
рдпрд╣ рд╕рдм рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреА рдЬрд░реВрд░рдд рд╣реИред WsServer - рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рд╡рд░реНрдЧ IoServer рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ, рдЬреЛ рдПрдХ рд╡реЗрдм рд╕реЙрдХреЗрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рд╣рдо 8080 рдХреЛ рдкреЛрд░реНрдЯ рдХрд░реЗрдВрдЧреЗред рдЖрдк рдХрд┐рд╕реА рднреА рдкреЛрд░реНрдЯ рдХреЛ рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВ, рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рдЬрд╛рдВрдЪрдирд╛ рд╣реИ рдХрд┐ рдпрд╣ рдмреНрд░рд╛рдВрдбрдореЙрдпрд░ рджреНрд╡рд╛рд░рд╛ рдЕрд╡рд░реБрджреНрдз рдирд╣реАрдВ рд╣реИред
рд░рд╛рдЬреНрдп рдмрдирд╛рдП рд░рдЦрдирд╛
рд╣рдо рдЦреЗрд▓ рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЛ рдЯреНрд░реИрдХ рдХрд░реЗрдВрдЧреЗ, рдбреЗрдЯрд╛ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рд╣рд░ рдмрд╛рд░ рдЧреЗрдо рдореЗрдВ рдЦрд╛рддреЗ рдореЗрдВ рдмрджрд▓рд╛рд╡ рд╣реЛрдВрдЧреЗ, рд╣рдо рд╕рд░реНрд╡рд░ рдкрд░ рдбреЗрдЯрд╛ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВрдЧреЗ рдФрд░ рд╕рднреА рдХрдиреЗрдХреНрдЯреЗрдб рдХреНрд▓рд╛рдЗрдВрдЯреНрд╕ рдХреЛ рднреЗрдЬреЗрдВрдЧреЗред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдЬреБрдбрд╝рдирд╛рд░ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЦреЗрд▓реЛрдВ рдХреА рд╕реВрдЪреА)ред рд╕рд╛рджрдЧреА рдХреЗ рд▓рд┐рдП, рд╣рдо рдЗрд╕реЗ рдмреЗрддрд░рддреАрдм рдврдВрдЧ рд╕реЗ рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдбреЗрдореЙрди рдХреА рдЕрд╡рдзрд┐ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╕реНрдерд┐рд░рддрд╛ рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВрдЧреЗ:
рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдЧреЗрдо рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рдЖрдИрдбреА рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рдо рдЗрд╕ рдмрд╛рдд рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдХрд┐рд╕ рдЦреЗрд▓ рдореЗрдВ рдШрдЯрдирд╛ рд╣реБрдИ рд╣реИред рд╡рд╛рдкрд╕ рд╣рдорд╛рд░реЗ рд╕реНрдХреЛрд░ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП:
рдЪреВрдВрдХрд┐ рдЧреНрд░рд╛рд╣рдХ рдЦреЗрд▓ рдХреЗ рджреМрд░рд╛рди рдХрд┐рд╕реА рднреА рд╕рдордп рд╣рдорд╛рд░реЗ рд╡рд┐рдЬреЗрдЯ рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рд╡рд╣ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЦрд╛рддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗред рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдЦреЗрд▓ рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЛ рднреЗрдЬрдХрд░ рдПрдХ рдирдП рдЕрдиреБрд░реЛрдз рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдирд╛ рд╣реИ, рдлрд┐рд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рдЧреЗрдо рдФрд░ рдЙрдирдХреЗ рд╕реНрдХреЛрд░ рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВред
рдпрд╣рд╛рдБ onOpen рд╡рд┐рдзрд┐ рдХрд╛ рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ рдЬреЛ рдпрд╣ рдХрд░рддрд╛ рд╣реИ:
рдореИрдВ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рд╣рдо рд╕рдВрджреЗрд╢ рдХреЛ JSON рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рднреЗрдЬрддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рдШрдЯрдирд╛ рдХрд╛ рдкреНрд░рдХрд╛рд░ рдПрдХ рд╕рдВрдкрддреНрддрд┐ рд╣реИред JSON рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ, рдЖрдк рдХрд┐рд╕реА рдЕрдиреНрдп рдкреНрд░рд╛рд░реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рддрд╛рдХрд┐ рд╣рдо рд╕рдВрд░рдЪрд┐рдд рдбреЗрдЯрд╛ рднреЗрдЬ рд╕рдХреЗрдВред
рдПрдЪрдЯреАрдПрдордПрд▓
рдЪреВрдВрдХрд┐ рд╣рдо рдПрдХ рд╡реЗрдм рд╕реЙрдХреЗрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбреЗрдЯрд╛ рднреЗрдЬрддреЗ рд╣реИрдВ, рдФрд░ рд╣рдо рдЙрдиреНрд╣реЗрдВ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВрдЧреЗ, рдкреГрд╖реНрда рдХрд╛ рдПрдЪрдЯреАрдПрдордПрд▓-рдХреЛрдб рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ:
<div id="scoreboard"> <table> </table> </div>
рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдкрдВрдХреНрддрд┐ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА:
<tr data-game-id="SOME-IDENTIFIER"> <td class="team home"> <h3>HOME TEAM NAME</h3> </td> <td class="score home"> <div id="counter-0-home"></div> </td> <td class="divider"> <p>:</p> </td> <td class="score away"> <div id="counter-0-away"></div> </td> <td class="team away"> <h3>AWAY TEAM NAME</h3> </td> </tr>
рддрддреНрд╡реЛрдВ рдХреА рдЖрдИрдбреА
рдХрд╛рдЙрдВрдЯрд░- * - * рд╣рдо рдЬреЗрдПрд╕ рдкреНрд▓рдЧрдЗрди рдореЗрдВ рдмрд╛рдж рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ
рдЪрд▓реЛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдЙрддрд░реЛред рдкрд╣рд▓реА рдЪреАрдЬ рд╕реЙрдХреЗрдЯ рдЦреЛрд▓рдирд╛ рд╣реИ:
var conn = new WebSocket('ws://localhost:8080');
рдЖрдкрдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рд░реНрд╡рд░ / рдбреЗрдорди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╣реЛрд╕реНрдЯ рдПрдбреНрд░реЗрд╕ рдпрд╛ рдкреЛрд░реНрдЯ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред
рдЕрдЧрд▓рд╛, рдЖрдкрдХреЛ рдПрдХ рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдПрдХ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рдкрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдЧрд╛:
conn.onmessage = function(e) {
рд╕рдВрджреЗрд╢ рдИрд╡реЗрдВрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ
рдИ рдХреЗ
рдбреЗрдЯрд╛ рдЧреБрдг рдореЗрдВ рд╣реИред рдЪреВрдБрдХрд┐ рд╣рдо JSON рдореЗрдВ рд╕рдВрджреЗрд╢ рднреЗрдЬ рд░рд╣реЗ рд╣реИрдВ, рд╣рдореЗрдВ рдкрд╣рд▓реЗ рдЗрд╕реЗ рдкрд╛рд░реНрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:
var message = $.parseJSON(e.data);
рдЕрдм рд╣рдо рд╕рдВрджреЗрд╢ рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
switch (message.type) { case 'init': setupScoreboard(message); break; case 'goal': goal(message); break; }
SetupScoreboard рдлрд╝рдВрдХреНрд╢рди рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ:
function setupScoreboard(message) {
рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ, рд╣рдо рдмрд╕ рдЧреЗрдо рдХреА рдПрдХ рд╕рд░рдгреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ "рд░рди" рдХрд░рддреЗ рд╣реИрдВ, рдореВрдВрдЫреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдВрдХ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдПрдХ рдирдИ рд▓рд╛рдЗрди рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдЧреЗрдо рдХреЗ рд▓рд┐рдП рдПрдирд┐рдореЗрдЯреЗрдб рдХрд╛рдЙрдВрдЯрд░ рдХреА рдПрдХ рдЬреЛрдбрд╝реА рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред
рдЧреЗрдо рд╕рд░рдгреА
рдЧреЗрдо рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдФрд░ рдХрд╛рдЙрдВрдЯрд░реЛрдВ рдХреЗ рд▓рд┐рдВрдХ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдЧреА, рддрд╛рдХрд┐ рд╣рдо рдЙрдиреНрд╣реЗрдВ рдЖрд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд░ рд╕рдХреЗрдВред
рдЗрд╕рдХреЗ рдмрд╛рдж
рд▓рдХреНрд╖реНрдп рдлрд╝рдВрдХреНрд╢рди рдЖрддрд╛ рд╣реИред рд╣рдо рдПрдХ рд╡реЗрдм рд╕реЙрдХреЗрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рд╣рдореЗрдВ рдПрдХ рд░рд╛рдЬреНрдп рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реИ, рдЗрд╕рдХреА рд╕рдВрд░рдЪрдирд╛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реИ:
{ type: 'goal', game: 'UNIQUE-ID', team: 'home' }
рдЦреЗрд▓ рд╕рдВрдкрддреНрддрд┐ рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рдЖрдИрдбреА рд╣реИ, рдЯреАрдо рдпрд╛ рддреЛ "рдШрд░" рдпрд╛ "рджреВрд░" рд╣реИред рдЗрд╕ рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╣рдо рдЧреЗрдо рдРрд░реЗ рдореЗрдВ рд╕реНрдХреЛрд░ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдореЗрдВ рдЬрд┐рд╕ рдХрд╛рдЙрдВрдЯрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЙрд╕реЗ рдвреВрдВрдв рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдмрдврд╝рд╛ рд╕рдХрддреЗ рд╣реИрдВред
function goal(message) { games[message.game][message.team]['score']++; var counter = games[message.game]['counter_'+message.team]; counter.incrementTo(games[message.game][message.team]['score']); }
рдЕрдм, рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЬреЛ рдХреБрдЫ рднреА рд╣реИ рд╡рд╣ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╕реЗ рд╕рд░реНрд╡рд░ рдХреЛ рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реИ:
php bin/server.php
рдирд┐рд╖реНрдХрд░реНрд╖
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВрдиреЗ рджрд┐рдЦрд╛рдпрд╛ рдХрд┐ JS, HTML рдФрд░ рд╡реЗрдм рд╕реЙрдХреЗрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд╛рдЗрд╡ рдЕрдХрд╛рдЙрдВрдЯ рд╡рд┐рдЬреЗрдЯ рдмрдирд╛рдирд╛ рдХрд┐рддрдирд╛ рдЖрд╕рд╛рди рд╣реИред рдмреЗрд╢рдХ, рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рдХреЗрд╡рд▓ рдПрдХ рдЦрд╛рддреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рджреЗрдЦрдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рд╣рдо JSON рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЖрд╕рд╛рдиреА рд╕реЗ рдЕрдиреНрдп рдбреЗрдЯрд╛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред
рдбреЗрдореЛ ред