рдХрдИ рдЗрдВрдЯрд░рдиреЗрдЯ рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рд╣рдордиреЗ рджреЗрдЦрд╛ рдХрд┐ рдЙрдирдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣рд┐рд╕реНрд╕рд╛ рдЖрдо рд╣реИ, рдФрд░
DRY рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдд рд╣реИ (рдЦреБрдж рдХреЛ рджреЛрд╣рд░рд╛рдПрдВ рдирд╣реАрдВ - рджреЛрд╣рд░рд╛рдПрдВ рдирд╣реАрдВ), рд╣рдордиреЗ рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдПрдХ рдЕрд▓рдЧ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд░рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдореЙрдбреНрдпреВрд▓ рдкрд░ рд▓рдЧрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛:
- рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╕реЗрд╡рд╛рдУрдВ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░рддрд╛;
- "рдХреНрд▓рд╛рдЗрдВрдЯ" рдХреЛрдб рдХреА рд╕рд╛рджрдЧреА;
- рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рдФрд░ рдЙрдЪреНрдЪ рдЧрддрд┐ред
рдореИрдВ рдПрдХ рдЖрд░рдХреНрд╖рдг рдмрдирд╛рдКрдВрдЧрд╛ рдХрд┐ рд╣рдорд╛рд░реА рд╕реЗрд╡рд╛рдПрдВ PHP рдореЗрдВ рд▓рд┐рдЦреА рдЧрдИ рд╣реИрдВ рдФрд░ рд▓рд┐рдирдХреНрд╕ рдЪрд▓рд╛рдиреЗ рд╡рд╛рд▓реЗ рдЕрдкрд╛рдЪреЗ рд╕рд░реНрд╡рд░ рдкрд░ рдЪрд▓рддреА рд╣реИрдВред рдореБрдЦреНрдп рдкреНрд░рд╢реНрди рдереЗ: "рдореЙрдбреНрдпреВрд▓ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рд╣реИ?" рдФрд░ "PHP рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ?"ред рдореЙрдбреНрдпреВрд▓ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рдзрдиреЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг, рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░, рд╕рд╛рде рд╣реА рд╣рдорд╛рд░реА рд╡реНрдпрдХреНрддрд┐рдЧрдд рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ, рдЬреНрдЮрд╛рди рдФрд░ рдЕрдиреБрднрд╡ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
3 рдореБрдЦреНрдп рд╡рд┐рдХрд▓реНрдк рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдереЗ:
- PHP рдореЗрдВ рдПрдХ рдЕрдиреНрдп рд╡реЗрдм рд╕реЗрд╡рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВ рдФрд░ CUrl рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдпрд╛ SOAP рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗрд╡рд╛рдУрдВ рд╕реЗ рдХреЙрд▓ рдХрд░реЗрдВред рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдиреБрдХрд╕рд╛рди рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреА рдЧрдИ рднрд╛рд╖рд╛ рдХрд╛ рдзреАрдорд╛ рд╕рдВрдЪрд╛рд▓рди рд╣реИ, рдиреЗрдЯрд╡рд░реНрдХ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рд▓рд╛рдЧрдд (рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдореЙрдбреНрдпреВрд▓ рдФрд░ рд╕реЗрд╡рд╛рдПрдВ рдПрдХ рд╣реА рд╕рд░реНрд╡рд░ рдкрд░ рдЪрд▓ рд░рд╣реА рд╣реЛрдВрдЧреА), рд╕рдорд╛рдирд╛рдВрддрд░ рдЕрдиреБрд░реЛрдзреЛрдВ рдореЗрдВ рд╕рд╛рдЭрд╛ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЬрдЯрд┐рд▓рддрд╛ред
- рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ FastCGI рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВред рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдкрд╣рд▓реБрдУрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ: C / C ++ рдореЗрдВ рдПрдХ рдореЙрдбреНрдпреВрд▓ рд▓рд┐рдЦрдиреЗ рдХреА рдХреНрд╖рдорддрд╛, рдЬреЛ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдмрдврд╝рд╛рдПрдЧрд╛ рдФрд░ рдмрд╣реБ-рдереНрд░реЗрдбреЗрдб рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рд╕рд╛рдЭрд╛ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред PHP рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдХреЙрд▓ рдпреВрдирд┐рдХреНрд╕ рдбреЛрдореЗрди рд╕реЙрдХреЗрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдиреЗрдЯрд╡рд░реНрдХ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рд▓рд╛рдЧрдд рд╕реЗ рдмрдЪрдирд╛ рд╣реЛрдЧрд╛ (рдЬрдм рд╕реЗрд╡рд╛рдПрдВ рдФрд░ рдореЙрдбреНрдпреВрд▓ рдПрдХ рд╣реА рд╕рд░реНрд╡рд░ рдкрд░ рд╕реНрдерд┐рдд рд╣реЛрддреЗ рд╣реИрдВ)ред
- рд╡рд░реНрдгрд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдорд╛рд░рд╛ рдзреНрдпрд╛рди рдбреА-рдмрд╕ рдЗрдВрдЯрд░рдкреНрд░реЛрд╕реЗрд╕ рд╕рдВрдЪрд╛рд░ рдкреНрд░рдгрд╛рд▓реА (рдЖрдИрдкреАрд╕реА) рдкрд░ рдЖрдХрд░реНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд▓рд┐рдирдХреНрд╕ рдореЗрдВ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдбреА-рдмрд╕ рдХреЗ рдЕрд╡рд╕рд░ рдФрд░ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ, рдЬреИрд╕реЗ рдХрд┐ рдЧрддрд┐, рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛, рдЕрдиреБрдХреВрд▓рдирд╢реАрд▓рддрд╛, рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рдЖрд╡рд░рдг рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐, рд╣рдореЗрдВ рдЖрдХрд░реНрд╖рдХ рдФрд░ рд╣рдорд╛рд░реА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рддреА рдкреНрд░рддреАрдд рд╣реБрдИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рджреВрд╕рд░реЗ рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рд╣рдореЗрдВ рдбреА-рдмрд╕ рдХрд╛ рдЕрдкрдирд╛ рдПрдирд╛рд▓реЙрдЧ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред рдЕрдЧрд▓рд╛, рдХреНрд▓рд╛рдЗрдВрдЯ PHP рдХреЛрдб рд╕реЗ рдореЙрдбреНрдпреВрд▓ рдХреЙрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд╡рд╛рд▓ рдЙрдарддрд╛ рд╣реИред рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░, рд╣рдо PHP рдореЗрдВ рдбреА-рдмрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рджреЛ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рд╕реЗ рдорд┐рд▓реЗ: GREE рд▓реИрдмреНрд╕ рд╕реЗ Pecl рдФрд░ рдЬрд╛рдкрд╛рдиреА рд╕реЗред рд▓реЗрдХрд┐рди, рдЪреВрдВрдХрд┐ рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА Pecl D-Bus рдкрд░ рдПрдХ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓реЗ рдХреЛ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЬрд╛рдкрд╛рдиреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рдорд┐рд▓рд╛ред C ++ рдХреА рдУрд░ рд╕реЗ, рд╣рдордиреЗ QtDBus рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛, рдХреНрдпреВрдЯреА рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд╕рд╛рде рдкреНрд░реЛрдЧреНрд░рд╛рдорд░реНрд╕ рдХреА рдкрд░рд┐рдЪрд┐рддрддрд╛ рдХреЗ рдХрд╛рд░рдгред
"рдЧреНрд░рд╛рд╣рдХ" рдХреЛрдб
рддреЛ, рдЪрд▓реЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред рдЪрд▓реЛ "рдХреНрд▓рд╛рдЗрдВрдЯ" PHP рдХреЛрдб рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдХреБрдЫ рдПрдкреНрд▓рд┐рдХреЗрд╢рди (Qt рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣рдорд╛рд░рд╛ рдореЙрдбреНрдпреВрд▓) рд╣реИ рдЬрд┐рд╕рдиреЗ рдЕрджреНрд╡рд┐рддреАрдп рдирд╛рдо test.service рдХреЗ рд╕рд╛рде рдбреА-рдмрд╕ рд╕реЗрд╡рд╛ рдкрдВрдЬреАрдХреГрдд рдХреА рд╣реИред рдПрдХ рд╕реЗрд╡рд╛ рдЗрд╕рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рд╡рд╕реНрддреБрдУрдВ рдХреА рдПрдХ рд╢реНрд░реЗрдгреАрдмрджреНрдз рд╕рдВрд░рдЪрдирд╛ рд╣реИред рдпрджрд┐ рдкрджрд╛рдиреБрдХреНрд░рдо рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЖрдк рдкрде рдХреЛ "/" рдСрдмреНрдЬреЗрдХреНрдЯ (рд▓рд┐рдирдХреНрд╕ рдореЗрдВ рд░реВрдЯ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рд╕рдорд╛рди) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕реЗрд╡рд╛ рдореЗрдВ рдПрдХ рд╡рд╕реНрддреБ "/ рдкрд░реАрдХреНрд╖рдг" рд╣реИред рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реЗрдЯ рдХреЗ рддрд░реАрдХреЗ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред "/ рдкрд░реАрдХреНрд╖рдг" рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ "рд╕рдо" рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░рдлрд╝реЗрд╕ "test.iface" рд╣реИред
client.php:
рдХреЛрдб рдореЗрдВ, рдпреЛрдЧ рд╡рд┐рдзрд┐ рдХреЛ рдбреА-рдмрд╕ рд╕рд┐рд╕реНрдЯрдо рдмрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ test.service рд╕реЗрд╡рд╛ рдкрд░ рдкрде / рдкрд░реАрдХреНрд╖рдг рдХреЗ рд╕рд╛рде рд╕реНрдерд┐рдд рд╡рд╕реНрддреБ рдХреЗ test.iface рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реЗ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡рд┐рдзрд┐ рдХреЛ рджреЛ рдкреВрд░реНрдгрд╛рдВрдХ рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕реЗрд╡рд╛ тАЬtest.serviceтАЭ рдкрд░ рдЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, 42 рдФрд░ 13 рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдкрд░рд┐рдгрд╛рдо var_dump рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдбреА-рдмрд╕ рдореЙрдбреНрдпреВрд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рдореЙрдбреНрдпреВрд▓ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЛ рдбрд┐рдЬрд╛рдЗрди рдХрд░рддреЗ рд╕рдордп, рд╣рдордиреЗ ZendFramework рд╢рдмреНрджрд╛рд╡рд▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ (рдЬреЛ C ++ рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рд▓рд┐рдП рдЕрдЬреАрдм рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ)ред рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдерд╛ рдХрд┐ рдбреА-рдмрд╕ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ "рд╕реЗрд╡рд╛", "рдЗрдВрдЯрд░рдлрд╝реЗрд╕", "рдСрдмреНрдЬреЗрдХреНрдЯ" рдЬреИрд╕реЗ рд╢рдмреНрдж рдкрд╣рд▓реЗ рд╣реА рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдереЗред рдФрд░ рднреНрд░рдо рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ ZendFramework рд╕реЗ "рдПрдХреНрд╢рди" рдФрд░ "рдХрдВрдЯреНрд░реЛрд▓рд░" рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреЛ рд▓рд┐рдпрд╛ред
"рдПрдХреНрд╢рди" рд╢рдмреНрдж рд╕реЗ рд╣рдордиреЗ рдХреНрд╡реЗрдереНрд░реЗрдб рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рдХрдХреНрд╖рд╛ рдХреЛ рд╕рдордЭрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдЬреЛ рдПрдХ рдРрд╕рд╛ рдзрд╛рдЧрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХрд┐рд╕реА рднреА рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдПрдХ
"рдирд┐рдпрдВрддреНрд░рдХ" рдХреЛ рдПрдХ рд╡рд░реНрдЧ рдХрд╣рд╛ рдЬрд╛рддрд╛ рдерд╛ рдЬреЛ рдЕрдкрдиреЗ рддрд░реАрдХреЛрдВ рдореЗрдВ рдПрдХреНрд╢рди рдХреЙрд▓ рдХреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ QObject рдФрд░ QDBusContext рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рд╕рд┐рд░ рдХрд╛ рдХрд╛рд░реНрдп
рдпрд╣рд╛рдВ рдореЙрдбреНрдпреВрд▓ рд╣реЗрдб рдлрд╝рдВрдХреНрд╢рди (main.cpp рдлрд╝рд╛рдЗрд▓) рдХрд╛ рдХреЛрдб рд╣реИред рдпрд╣рд╛рдВ, рдирд┐рдпрдВрддреНрд░рдХ рдбреА-рдмрд╕ рд╕рд┐рд╕реНрдЯрдо рдмрд╕ рдкрд░ рдкрдВрдЬреАрдХреГрдд рд╣реИред
#include <QCoreApplication> #include <QDebug> #include <QDBusConnection> #include #define SERVICE_NAME #define OBJECT_PATH int main(int argc, char *argv[]) { QCoreApplication app(argc, argv); // D-Bus QDBusConnection conn = QDBusConnection::systemBus(); // if (! conn.registerService(SERVICE_NAME)) { qDebug() << << conn.lastError().message(); exit(EXIT_FAILURE); } TestController controller; // conn.registerObject(OBJECT_PATH, &controller, QDBusConnection::ExportAllContents); return app.exec(); }
"рдирд┐рдпрдВрддреНрд░рдХ"
рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдирд┐рдпрдВрддреНрд░рдХ рд╡рд┐рдзрд┐рдпреЛрдВ рдЬреЛ рдбреА-рдмрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрдВрдЯрд░рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЙрд▓ рдХреЗ рд▓рд┐рдП рдЦреБрд▓реЗ рд╣реИрдВ, рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рд╕рдВрдЪрд╛рд▓рд┐рдд рд╣реЛрддреЗ рд╣реИрдВред рдпрд╣реА рд╣реИ, рдпрджрд┐ рдкрд╣рд▓рд╛ рдХреНрд▓рд╛рдЗрдВрдЯ рдпреЛрдЧ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рддреЛ рджреВрд╕рд░реА рдХреЛ рддрдм рддрдХ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрдм рддрдХ рдХрд┐ рд╡рд┐рдзрд┐ рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддреАред рдЗрд╕рд▓рд┐рдП, рд╣рдордиреЗ рд▓рдВрдмреЗ рдЗрдВрддрдЬрд╛рд░ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рддрд░реАрдХреЛрдВ рдХреЗ рдХреЛрдб рдХреЛ рдХрдо рд╕реЗ рдХрдо рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдкреНрд░рддреНрдпреЗрдХ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЙрд▓ рдХреЗ рд╕рд╛рде, рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдзрд╛рдЧрд╛ (рдХрд╛рд░реНрд░рд╡рд╛рдИ) рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╡рд┐рдзрд┐ рдмрд╛рд╣рд░ рдирд┐рдХрд▓ рдЬрд╛рддреА рд╣реИред
рдирд┐рдпрдВрддреНрд░рдХ рд╡рд░реНрдЧ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ (рдлрд╝рд╛рдЗрд▓ TestController.h)ред рд╣рдо рд╕рдВрдХреНрд╖рд┐рдкреНрддрддрд╛ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╡рд┐рдзрд┐ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд╕рдВрдХреНрд╖рд┐рдкреНрддрддрд╛ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦреЗрдВрдЧреЗред
#ifndef TEST_CONTROLLER_H #define TEST_CONTROLLER_H #include <QObject> #include <QDBusContext> #include <QDBusConnection> #include <QDebug> #include class TestController: public QObject, protected QDBusContext { Q_OBJECT Q_CLASSINFO(, ) // public: Q_INVOKABLE int sum(int a, int b) { // D-Bus, . setDelayedReply(true); // (new SumAction(a, b, this))->start(); // . . return 0; }; }; #endif // TEST_CONTROLLER_H
"рдХрд╛рд░реНрд░рд╡рд╛рдИ"
рдХреНрд░рд┐рдпрд╛рдУрдВ рдореЗрдВ рд╣рдо рдореЙрдбреНрдпреВрд▓ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдЬрдЧрд╣ рджреЗрдВрдЧреЗред рдкреНрд░рддреНрдпреЗрдХ рдирд┐рдпрдВрддреНрд░рдХ рд╡рд┐рдзрд┐ рдореЗрдВ рдПрдХ рдПрдХреНрд╢рди рдХреНрд▓рд╛рд╕ рд╣реЛрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдХреНрд╢рди рдХреНрд▓рд╛рд╕ рд▓рд┐рдЦрдирд╛ рдЙрдЪрд┐рдд рд╣реИред
Action.h #ifndef ACTION_H #define ACTION_H #include <QThread> #include <QDBusMessage> #include <QDBusArgument> #include <QTime> #include <QDBusReply> class QDBusContext; class Action: public QThread { Q_OBJECT public: Action(const QDBusContext* context); virtual ~Action(); // template<typename X> QDBusReply<X> reply() const { return _reply; } protected: // . inline QDBusMessage& reply() { return _reply; } // inline const QDBusMessage& request() { return _request; } private slots: void onFinished(); private: QDBusConnection* _connection; QDBusMessage _request; QDBusMessage _reply; }; #endif // ACTION_H
Action.cpp #include "Action.h" #include <QDBusConnection> #include <QDBusContext> #include <QDebug> #include <QDir> Action::Action(const QDBusContext* context) { if (context != 0) { // _connection = new QDBusConnection(context->connection()); _request = context->message(); } else { _connection = 0; _request = QDBusMessage(); } // _reply = _request.createReply(); // if (! connect(this, SIGNAL(finished()), this, SLOT(onFinished()))) qFatal("SIGNAL/SLOT connection error"); } Action::~Action() { if (_connection != 0) delete _connection; } void Action::onFinished() { if (_connection != 0) { // D-Bus _connection->send(_reply); } /* * * , (event loop). */ deleteLater(); }
рдЗрд╕ рд╡рд░реНрдЧ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рдбреА-рдмрд╕ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдХрд┐рдП рдмрд┐рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдкрдХреЛ рдмрд╕ рдЗрддрдирд╛ рдХрд░рдирд╛ рд╣реИ рдХрд┐ рд╡рд░реНрдЧ рдЧреБрдгреЛрдВ рдореЗрдВ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдП рдФрд░ рдмреА рдЬреЛрдбрд╝реЗрдВ, рдФрд░ рдЙрддреНрддрд░ () рд▓рд┐рдВрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд░рд┐рдгрд╛рдо рд▓рд┐рдЦреЗрдВред
SumAction.h:
#ifndef SUMACTION_H #define SUMACTION_H #include "Action.h" class SumAction: public Action { Q_OBJECT public: SumAction(int a, int b, const QDBusContext* context): Action(context), _a(a), _b(b) {} virtual ~SumAction() {}; protected: void run() { reply() << _a + _b; } private: int _a; int _b; }; #endif
рдбреА-рдмрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди
рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдореЙрдбреНрдпреВрд▓ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдПрдХ рдЖрд╡реЗрджрди рдорд┐рд▓рддрд╛ рд╣реИ рдЬреЛ рдбреА-рдмрд╕ рд╕реЗрд╡рд╛ test.service рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕реЗ рдЪрд▓рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВред рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдкрд░рд┐рдгрд╛рдо рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реЛрдЧрд╛:
$ ./dbus-test Error: "Connection ":1.66" is not allowed to own the service "test.service" due to security policies in the configuration file"
рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдбреА-рдмрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдбреА-рдмрд╕ рд╕реБрд░рдХреНрд╖рд╛ рдФрд░ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ
рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рдЪреАрд▓рд╛рдкрди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдмрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╛рдордЧреНрд░реА рдмрдирд╛рдПрдБ: /etc/dbus-1/system.d/dbus-test.conf:
<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN" "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd"> <busconfig> <policy context="default"> <allow own="test.service"/> <allow send_destination="test.service"/> <allow receive_sender="test.service"/> </policy> </busconfig>
рдбреА-рдмрд╕ рдбреЗрдореЙрди рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдлрд╝рд╛рдЗрд▓ рд╕рд╣реЗрдЬрдиреЗ рдХреЗ рдмрд╛рдж рдкрд░рд┐рд╡рд░реНрддрди рдкреНрд░рднрд╛рд╡реА рд╣реЛрдВрдЧреЗред
рд╣рдо рдореЙрдбреНрдпреВрд▓ рдХреЛ рдкреБрдирдГ рдЖрд░рдВрдн рдХрд░реЗрдВрдЧреЗ рдФрд░ рдпрджрд┐ рдпрд╣ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╢реБрд░реВ рд╣реЛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ PHP рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред
$ php client.php int(55)
рдпрд╣рд╛рдВ рдЕрдкреЗрдХреНрд╖рд┐рдд рдкрд░рд┐рдгрд╛рдо рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: 42 + 13 = 55ред рд╕реВрддреНрд░
рдпрд╣рд╛рдВ рд▓рд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛
рд╣реИ ред
рдирд┐рд╖реНрдХрд░реНрд╖
рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдЗрдВрдЯрд░рдкреНрд░реЛрд╕реЗрд╕ рд╕рдВрдЪрд╛рд░ рдХреА рд╡рд┐рдзрд┐ рдиреЗ рд╣рдореЗрдВ рдХрдИ рд╡реЗрдм рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд╕рд╛рде C ++ рдореЗрдВ рд▓рд┐рдЦреЗ рдПрдХ рдореЙрдбреНрдпреВрд▓ рдХреА рдмрд╛рддрдЪреАрдд рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреА, рдЬрд┐рд╕рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдореЗрдВ рдЬрдЯрд┐рд▓ рд╕реВрдЪрдирд╛ рдкреНрд░рдгрд╛рд▓реА рдХреЗ рдирд┐рд░реНрдорд╛рдг рдореЗрдВ рдЙрдЪреНрдЪ рдкреНрд░рджрд░реНрд╢рди рдФрд░ рд▓рдЪреАрд▓рд╛рдкрди рдорд┐рд▓рд╛ рдЬреЛ C ++ (рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ Qt) рд╣рдореЗрдВ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдФрд░ PHP рдореЗрдВ рд╡реЗрдм рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдФрд░ рд╕рдорд░реНрдерди рдХреА рд╕реБрд╡рд┐рдзрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред