PHP backend-แƒ˜แƒก แƒ’แƒแƒ“แƒแƒขแƒแƒœแƒ Redis streams แƒแƒ•แƒขแƒแƒ‘แƒฃแƒกแƒจแƒ˜ แƒ“แƒ แƒแƒ แƒฉแƒ”แƒ•แƒ แƒฉแƒแƒ แƒฉแƒ-แƒ“แƒแƒ›แƒแƒฃแƒ™แƒ˜แƒ“แƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ‘แƒ˜แƒ‘แƒšแƒ˜แƒแƒ—แƒ”แƒ™แƒ

PHP backend-แƒ˜แƒก แƒ’แƒแƒ“แƒแƒขแƒแƒœแƒ Redis streams แƒแƒ•แƒขแƒแƒ‘แƒฃแƒกแƒจแƒ˜ แƒ“แƒ แƒแƒ แƒฉแƒ”แƒ•แƒ แƒฉแƒแƒ แƒฉแƒ-แƒ“แƒแƒ›แƒแƒฃแƒ™แƒ˜แƒ“แƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ‘แƒ˜แƒ‘แƒšแƒ˜แƒแƒ—แƒ”แƒ™แƒ

แƒฌแƒ˜แƒœแƒแƒกแƒ˜แƒขแƒงแƒ•แƒแƒแƒ‘แƒ

แƒฉแƒ”แƒ›แƒ˜ แƒ•แƒ”แƒ‘แƒกแƒแƒ˜แƒขแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒกแƒแƒช แƒ•แƒ›แƒฃแƒจแƒแƒแƒ‘ แƒ แƒแƒ’แƒแƒ แƒช แƒฐแƒแƒ‘แƒ˜, แƒจแƒ”แƒฅแƒ›แƒœแƒ˜แƒšแƒ˜แƒ แƒ˜แƒ›แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ แƒแƒ› แƒ›แƒแƒกแƒžแƒ˜แƒœแƒซแƒšแƒแƒ‘แƒก แƒกแƒแƒ˜แƒœแƒขแƒ”แƒ แƒ”แƒกแƒ แƒ›แƒ—แƒแƒ•แƒแƒ  แƒ’แƒ•แƒ”แƒ แƒ“แƒ”แƒ‘แƒก แƒ“แƒ แƒžแƒ”แƒ แƒกแƒแƒœแƒแƒšแƒฃแƒ  แƒกแƒแƒ˜แƒขแƒ”แƒ‘แƒก. แƒ”แƒก แƒ—แƒ”แƒ›แƒ แƒ›แƒแƒ˜แƒœแƒขแƒ”แƒ แƒ”แƒกแƒ”แƒ‘แƒ“แƒ แƒฉแƒ”แƒ›แƒ˜ แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒ’แƒ–แƒแƒฃแƒ แƒแƒ‘แƒ˜แƒก แƒ“แƒแƒกแƒแƒฌแƒงแƒ˜แƒกแƒจแƒ˜แƒ•แƒ”; แƒ˜แƒ› แƒ›แƒแƒ›แƒ”แƒœแƒขแƒจแƒ˜ แƒ›แƒ” แƒ›แƒแƒฎแƒ˜แƒ‘แƒšแƒฃแƒšแƒ˜ แƒ•แƒ˜แƒงแƒแƒ•แƒ˜ แƒ“แƒ˜แƒ“แƒ˜ แƒžแƒ แƒแƒคแƒ”แƒกแƒ˜แƒแƒœแƒแƒšแƒ”แƒ‘แƒ˜แƒก แƒžแƒแƒ•แƒœแƒแƒ›, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒฌแƒ”แƒ แƒ”แƒœ แƒกแƒแƒ™แƒฃแƒ—แƒแƒ  แƒ—แƒแƒ•แƒ–แƒ”, แƒ—แƒแƒ•แƒ˜แƒแƒœแƒ— แƒฐแƒแƒ‘แƒ˜แƒ”แƒ‘แƒกแƒ แƒ“แƒ แƒžแƒ แƒแƒ”แƒฅแƒขแƒ”แƒ‘แƒ–แƒ”. แƒ›แƒแƒ—แƒ˜ แƒแƒฆแƒ›แƒแƒฉแƒ”แƒœแƒ˜แƒก แƒฉแƒ•แƒ”แƒ•แƒ แƒ“แƒฆแƒ”แƒ›แƒ“แƒ” แƒจแƒ”แƒ›แƒแƒ แƒฉแƒ”แƒœแƒ˜แƒšแƒ˜แƒ: แƒ—แƒ˜แƒ—แƒฅแƒ›แƒ˜แƒก แƒงแƒ•แƒ”แƒšแƒ แƒ™แƒแƒ›แƒ”แƒ แƒชแƒ˜แƒฃแƒš แƒ“แƒ แƒแƒ แƒช แƒ—แƒฃ แƒ˜แƒกแƒ” แƒ™แƒแƒ›แƒ”แƒ แƒชแƒ˜แƒฃแƒš แƒกแƒแƒ˜แƒขแƒ–แƒ”, แƒ•แƒแƒ’แƒ แƒซแƒ”แƒšแƒ”แƒ‘ แƒซแƒ˜แƒ แƒจแƒ˜ แƒงแƒฃแƒ แƒ”แƒ‘แƒแƒก แƒแƒ•แƒขแƒแƒ แƒ”แƒ‘แƒ˜แƒก แƒ‘แƒ›แƒฃแƒšแƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒกแƒแƒซแƒ”แƒ‘แƒœแƒแƒ“.

แƒ˜แƒ“แƒ”แƒ˜แƒก แƒ’แƒแƒœแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ”แƒ‘แƒ

แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜ แƒ•แƒ”แƒ แƒกแƒ˜แƒ แƒ˜แƒงแƒ แƒ›แƒฎแƒแƒšแƒแƒ“ html แƒ’แƒ•แƒ”แƒ แƒ“แƒ˜ แƒฉแƒ”แƒ›แƒก แƒžแƒ”แƒ แƒกแƒแƒœแƒแƒšแƒฃแƒ  แƒ•แƒ”แƒ‘แƒกแƒแƒ˜แƒขแƒ–แƒ”, แƒกแƒแƒ“แƒแƒช แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ”แƒ‘แƒ˜แƒ— แƒ•แƒ“แƒ”แƒ‘ แƒ‘แƒ›แƒฃแƒšแƒ”แƒ‘แƒก ul แƒกแƒ˜แƒแƒจแƒ˜. แƒ’แƒแƒ แƒ™แƒ•แƒ”แƒฃแƒšแƒ˜ แƒžแƒ”แƒ แƒ˜แƒแƒ“แƒ˜แƒก แƒ’แƒแƒœแƒ›แƒแƒ•แƒšแƒแƒ‘แƒแƒจแƒ˜ 20 แƒ’แƒ•แƒ”แƒ แƒ“แƒ˜แƒก แƒแƒ™แƒ แƒ”แƒคแƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ“แƒแƒ•แƒ˜แƒฌแƒงแƒ” แƒคแƒ˜แƒฅแƒ แƒ˜, แƒ แƒแƒ› แƒ”แƒก แƒแƒ  แƒ˜แƒงแƒ แƒซแƒแƒšแƒ˜แƒแƒœ แƒ”แƒคแƒ”แƒฅแƒขแƒฃแƒ แƒ˜ แƒ“แƒ แƒ’แƒแƒ“แƒแƒ•แƒฌแƒงแƒ•แƒ˜แƒขแƒ” แƒžแƒ แƒแƒชแƒ”แƒกแƒ˜แƒก แƒแƒ•แƒขแƒแƒ›แƒแƒขแƒ˜แƒ–แƒแƒชแƒ˜แƒ. stackoverflow-แƒ–แƒ” แƒจแƒ”แƒ•แƒแƒ›แƒฉแƒœแƒ˜แƒ”, แƒ แƒแƒ› แƒ‘แƒ”แƒ•แƒ แƒ˜ แƒแƒ“แƒแƒ›แƒ˜แƒแƒœแƒ˜ แƒ›แƒ˜แƒฃแƒ—แƒ˜แƒ—แƒ”แƒ‘แƒก แƒกแƒแƒ˜แƒขแƒ”แƒ‘แƒ–แƒ” แƒ—แƒแƒ•แƒ˜แƒก แƒžแƒ แƒแƒคแƒ˜แƒšแƒ”แƒ‘แƒจแƒ˜, แƒแƒ›แƒ˜แƒขแƒแƒ› แƒ“แƒแƒ•แƒฌแƒ”แƒ แƒ” แƒžแƒแƒ แƒกแƒ”แƒ แƒ˜ php-แƒจแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒ’แƒแƒ“แƒ˜แƒแƒ“แƒ แƒžแƒ แƒแƒคแƒ˜แƒšแƒ”แƒ‘แƒจแƒ˜, แƒ“แƒแƒฌแƒงแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜แƒ“แƒแƒœ (SO-แƒ–แƒ” แƒ›แƒ˜แƒกแƒแƒ›แƒแƒ แƒ—แƒ”แƒ‘แƒ˜ แƒ“แƒฆแƒ”แƒ›แƒ“แƒ” แƒแƒกแƒ”แƒ—แƒ˜แƒ: `/users/1` ), แƒแƒ›แƒแƒ˜แƒฆแƒ แƒ‘แƒ›แƒฃแƒšแƒ”แƒ‘แƒ˜ แƒกแƒแƒกแƒฃแƒ แƒ•แƒ”แƒšแƒ˜ แƒขแƒ”แƒ’แƒ˜แƒ“แƒแƒœ แƒ“แƒ แƒ“แƒแƒแƒ›แƒแƒขแƒ SQLite-แƒจแƒ˜.

แƒแƒ›แƒแƒก แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ”แƒฌแƒแƒ“แƒแƒก แƒ›แƒ”แƒแƒ แƒ” แƒ•แƒ”แƒ แƒกแƒ˜แƒ: แƒแƒ—แƒ˜แƒแƒ—แƒแƒกแƒแƒ‘แƒ˜แƒ— URL-แƒ˜แƒก แƒ™แƒแƒšแƒ”แƒฅแƒชแƒ˜แƒ SQLite แƒชแƒฎแƒ แƒ˜แƒšแƒจแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ›แƒแƒช แƒฉแƒแƒแƒœแƒแƒชแƒ•แƒšแƒ แƒกแƒขแƒแƒขแƒ˜แƒ™แƒฃแƒ แƒ˜ แƒกแƒ˜แƒ HTML-แƒจแƒ˜. แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜ แƒซแƒ˜แƒ”แƒ‘แƒ แƒ’แƒแƒ•แƒแƒ™แƒ”แƒ—แƒ” แƒแƒ› แƒกแƒ˜แƒแƒจแƒ˜. แƒ˜แƒ›แƒ˜แƒขแƒแƒ› แƒ แƒแƒ› แƒ˜แƒงแƒ แƒ›แƒฎแƒแƒšแƒแƒ“ URL-แƒ”แƒ‘แƒ˜, แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒซแƒ˜แƒ”แƒ‘แƒ แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒ›แƒแƒ—แƒ–แƒ” แƒ˜แƒงแƒ แƒ“แƒแƒคแƒฃแƒซแƒœแƒ”แƒ‘แƒฃแƒšแƒ˜.

แƒแƒ› แƒ”แƒขแƒแƒžแƒ–แƒ” แƒ›แƒ˜แƒ•แƒแƒขแƒแƒ•แƒ” แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜ แƒ“แƒ แƒ“แƒ˜แƒ“แƒ˜ แƒฎแƒœแƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ“แƒแƒ•แƒฃแƒ‘แƒ แƒฃแƒœแƒ“แƒ˜ แƒ›แƒแƒก. แƒแƒ› แƒ”แƒขแƒแƒžแƒ–แƒ” แƒฉแƒ”แƒ›แƒ˜ แƒกแƒแƒ›แƒฃแƒจแƒแƒ แƒ’แƒแƒ›แƒแƒชแƒ“แƒ˜แƒšแƒ”แƒ‘แƒ แƒฃแƒ™แƒ•แƒ” แƒกแƒแƒ› แƒฌแƒ”แƒšแƒ–แƒ” แƒ›แƒ”แƒขแƒ˜ แƒ˜แƒงแƒ แƒ“แƒ แƒ•แƒ’แƒ แƒซแƒœแƒแƒ‘แƒ“แƒ˜, แƒ แƒแƒ› แƒฃแƒคแƒ แƒ แƒกแƒ”แƒ แƒ˜แƒแƒ–แƒฃแƒšแƒ˜ แƒ แƒแƒ›แƒ˜แƒก แƒ’แƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒ แƒจแƒ”แƒ›แƒ”แƒซแƒšแƒ. แƒ’แƒแƒ แƒ“แƒ แƒแƒ›แƒ˜แƒกแƒ, แƒ“แƒ˜แƒ“แƒ˜ แƒ˜แƒงแƒ แƒกแƒฃแƒ แƒ•แƒ˜แƒšแƒ˜, แƒ“แƒแƒ”แƒฃแƒคแƒšแƒแƒœ แƒจแƒ”แƒ“แƒแƒ แƒ”แƒ‘แƒ˜แƒ— แƒแƒฎแƒแƒš แƒขแƒ”แƒฅแƒœแƒแƒšแƒแƒ’แƒ˜แƒ”แƒ‘แƒก.

แƒ—แƒแƒœแƒแƒ›แƒ”แƒ“แƒ แƒแƒ•แƒ” แƒ•แƒ”แƒ แƒกแƒ˜แƒ

แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜ Docker-แƒจแƒ˜ แƒ’แƒแƒœแƒšแƒแƒ’แƒ”แƒ‘แƒฃแƒšแƒ˜, แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒ แƒ’แƒแƒ“แƒแƒ•แƒ˜แƒ“แƒ mongoDb-แƒ–แƒ” แƒ“แƒ แƒแƒฎแƒšแƒแƒฎแƒแƒœแƒก แƒ“แƒแƒ”แƒ›แƒแƒขแƒ แƒ แƒแƒ“แƒ˜แƒจ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ—แƒแƒ•แƒ˜แƒ“แƒแƒœ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒฅแƒ”แƒจแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ˜แƒงแƒ. แƒ”แƒ แƒ—-แƒ”แƒ แƒ—แƒ˜ PHP แƒ›แƒ˜แƒ™แƒ แƒแƒฉแƒแƒ แƒฉแƒ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒกแƒแƒคแƒฃแƒซแƒ•แƒšแƒแƒ“.

แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ

แƒแƒฎแƒแƒšแƒ˜ แƒกแƒแƒ˜แƒขแƒ”แƒ‘แƒ˜ แƒ”แƒ›แƒแƒขแƒ”แƒ‘แƒ แƒ™แƒแƒœแƒกแƒแƒšแƒ˜แƒก แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ˜แƒ—, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒกแƒ˜แƒœแƒฅแƒ แƒแƒœแƒฃแƒšแƒแƒ“ แƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒก:

  • แƒ˜แƒขแƒ•แƒ˜แƒ แƒ—แƒ”แƒ‘แƒ แƒจแƒ˜แƒœแƒแƒแƒ แƒกแƒ˜ URL-แƒ˜แƒ—
  • แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒก แƒ“แƒ แƒแƒจแƒแƒก, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ›แƒ˜แƒฃแƒ—แƒ˜แƒ—แƒ”แƒ‘แƒก แƒฎแƒ”แƒšแƒ›แƒ˜แƒกแƒแƒฌแƒ•แƒ“แƒแƒ›แƒ˜ แƒ˜แƒงแƒ แƒ—แƒฃ แƒแƒ แƒ HTTPS
  • แƒ˜แƒœแƒแƒ แƒฉแƒฃแƒœแƒ”แƒ‘แƒก แƒกแƒแƒ˜แƒขแƒ˜แƒก แƒแƒ แƒกแƒก
  • แƒฌแƒงแƒแƒ แƒแƒก HTML แƒ“แƒ แƒกแƒแƒ—แƒแƒฃแƒ แƒ”แƒ‘แƒ˜ แƒ˜แƒœแƒแƒฎแƒ”แƒ‘แƒ โ€žแƒ˜แƒœแƒ“แƒ”แƒฅแƒกแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒกโ€œ แƒ˜แƒกแƒขแƒแƒ แƒ˜แƒแƒจแƒ˜
  • แƒแƒแƒœแƒแƒšแƒ˜แƒ–แƒ”แƒ‘แƒก แƒจแƒ˜แƒœแƒแƒแƒ แƒกแƒก, แƒแƒ›แƒแƒœแƒแƒฌแƒ”แƒ แƒก แƒกแƒแƒ—แƒแƒฃแƒ แƒกแƒ แƒ“แƒ แƒแƒฆแƒฌแƒ”แƒ แƒแƒก
  • แƒ˜แƒœแƒแƒฎแƒแƒ•แƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒก แƒชแƒแƒšแƒ™แƒ”แƒฃแƒš แƒ™แƒแƒšแƒ”แƒฅแƒชแƒ˜แƒแƒจแƒ˜

แƒ”แƒก แƒกแƒแƒ™แƒ›แƒแƒ แƒ˜แƒกแƒ˜ แƒ˜แƒงแƒ แƒกแƒแƒ˜แƒขแƒ”แƒ‘แƒ˜แƒก แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒจแƒ”แƒกแƒแƒœแƒแƒฎแƒแƒ“ แƒ“แƒ แƒกแƒ˜แƒแƒจแƒ˜ แƒ’แƒแƒ›แƒแƒกแƒแƒขแƒแƒœแƒแƒ“:

PHP backend-แƒ˜แƒก แƒ’แƒแƒ“แƒแƒขแƒแƒœแƒ Redis streams แƒแƒ•แƒขแƒแƒ‘แƒฃแƒกแƒจแƒ˜ แƒ“แƒ แƒแƒ แƒฉแƒ”แƒ•แƒ แƒฉแƒแƒ แƒฉแƒ-แƒ“แƒแƒ›แƒแƒฃแƒ™แƒ˜แƒ“แƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ‘แƒ˜แƒ‘แƒšแƒ˜แƒแƒ—แƒ”แƒ™แƒ

แƒ›แƒแƒ’แƒ แƒแƒ› แƒงแƒ•แƒ”แƒšแƒแƒคแƒ แƒ˜แƒก แƒแƒ•แƒขแƒแƒ›แƒแƒขแƒฃแƒ แƒ˜ แƒ˜แƒœแƒ“แƒ”แƒฅแƒกแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก, แƒ™แƒแƒขแƒ”แƒ’แƒแƒ แƒ˜แƒ–แƒแƒชแƒ˜แƒ˜แƒกแƒ แƒ“แƒ แƒ แƒ”แƒ˜แƒขแƒ˜แƒœแƒ’แƒ˜แƒก, แƒงแƒ•แƒ”แƒšแƒแƒคแƒ แƒ˜แƒก แƒ’แƒแƒœแƒแƒฎแƒšแƒ”แƒ‘แƒ˜แƒก แƒ˜แƒ“แƒ”แƒ แƒ™แƒแƒ แƒ’แƒแƒ“ แƒแƒ  แƒฏแƒ“แƒ”แƒ‘แƒแƒ“แƒ แƒแƒ› แƒžแƒแƒ แƒแƒ“แƒ˜แƒ’แƒ›แƒแƒจแƒ˜. แƒ—แƒฃแƒœแƒ“แƒแƒช แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒ•แƒ”แƒ‘ แƒ›แƒ”แƒ—แƒแƒ“แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ แƒ’แƒ•แƒ”แƒ แƒ“แƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒกแƒแƒ›แƒแƒขแƒ”แƒ‘แƒšแƒแƒ“, แƒกแƒแƒญแƒ˜แƒ แƒแƒ แƒ™แƒแƒ“แƒ˜แƒก แƒ“แƒฃแƒ‘แƒšแƒ˜แƒ แƒ”แƒ‘แƒ แƒ“แƒ แƒ“แƒแƒ‘แƒšแƒแƒ™แƒ•แƒ, แƒ แƒแƒ—แƒ แƒ—แƒแƒ•แƒ˜แƒ“แƒแƒœ แƒ˜แƒฅแƒœแƒแƒก แƒแƒชแƒ˜แƒšแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒžแƒแƒขแƒ”แƒœแƒชแƒ˜แƒฃแƒ แƒ˜ DDoS.

แƒ–แƒแƒ’แƒแƒ“แƒแƒ“, แƒ แƒ แƒ—แƒฅแƒ›แƒ แƒฃแƒœแƒ“แƒ, แƒงแƒ•แƒ”แƒšแƒแƒคแƒ แƒ˜แƒก แƒ’แƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒ แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ แƒกแƒ˜แƒœแƒฅแƒ แƒแƒœแƒฃแƒšแƒแƒ“ แƒ“แƒ แƒ•แƒ”แƒ‘ แƒ›แƒ”แƒ—แƒแƒ“แƒ˜แƒ— แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒจแƒ”แƒ˜แƒœแƒแƒฎแƒแƒ— URL แƒ˜แƒกแƒ”, แƒ แƒแƒ› แƒแƒ›แƒแƒ–แƒ แƒ–แƒ”แƒœแƒ˜ แƒ“แƒ”แƒ›แƒแƒœแƒ˜ แƒจแƒ”แƒแƒกแƒ แƒฃแƒšแƒแƒก แƒงแƒ•แƒ”แƒšแƒ แƒ“แƒแƒ•แƒแƒšแƒ”แƒ‘แƒ แƒกแƒ˜แƒ˜แƒ“แƒแƒœ URL-แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. แƒ›แƒแƒ’แƒ แƒแƒ› แƒ›แƒแƒ˜แƒœแƒช, แƒแƒฅแƒแƒช แƒกแƒ˜แƒขแƒงแƒ•แƒ โ€žแƒ แƒ˜แƒ’แƒ˜โ€œ แƒ—แƒแƒ•แƒก แƒ˜แƒฉแƒ”แƒœแƒก. แƒ“แƒ แƒ—แƒฃ แƒ แƒ˜แƒ’แƒ˜ แƒ’แƒแƒœแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ, แƒ›แƒแƒจแƒ˜แƒœ แƒงแƒ•แƒ”แƒšแƒ แƒ“แƒแƒ•แƒแƒšแƒ”แƒ‘แƒ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ“แƒแƒ˜แƒงแƒแƒก แƒ“แƒ แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ“แƒ”แƒก แƒ›แƒ˜แƒœแƒ˜แƒ›แƒฃแƒ› แƒแƒกแƒ˜แƒœแƒฅแƒ แƒแƒœแƒฃแƒšแƒแƒ“.

แƒ’แƒแƒ“แƒแƒฌแƒงแƒ•แƒ”แƒขแƒ˜แƒšแƒ”แƒ‘แƒ

แƒ’แƒแƒœแƒแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ”แƒ— แƒ แƒ˜แƒ’แƒ”แƒ‘แƒ˜ แƒ“แƒ แƒจแƒ”แƒฅแƒ›แƒ”แƒœแƒ˜แƒ— แƒ›แƒแƒ•แƒšแƒ”แƒœแƒ”แƒ‘แƒ–แƒ” แƒแƒ แƒ˜แƒ”แƒœแƒขแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ แƒงแƒ•แƒ”แƒšแƒ แƒแƒ›แƒแƒชแƒแƒœแƒ˜แƒก แƒ“แƒแƒกแƒแƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒšแƒแƒ“. แƒ“แƒ แƒ›แƒ” แƒ“แƒ˜แƒ“แƒ˜ แƒฎแƒแƒœแƒ˜แƒ แƒ›แƒ˜แƒœแƒ“แƒ แƒ•แƒชแƒแƒ“แƒ Redis Streams.

Redis แƒœแƒแƒ™แƒแƒ“แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ PHP-แƒจแƒ˜

แƒ˜แƒ›แƒ˜แƒขแƒแƒ› แƒ แƒแƒ› แƒ•แƒ˜แƒœแƒแƒ˜แƒ“แƒแƒœ แƒฉแƒ”แƒ›แƒ˜ แƒฉแƒแƒ แƒฉแƒ แƒแƒ  แƒแƒ แƒ˜แƒก แƒกแƒแƒ›แƒ˜ แƒ’แƒ˜แƒ’แƒแƒœแƒขแƒ˜แƒ“แƒแƒœ แƒ”แƒ แƒ—-แƒ”แƒ แƒ—แƒ˜ Symfony, Laravel, Yii, แƒ›แƒกแƒฃแƒ แƒก แƒ•แƒ˜แƒžแƒแƒ•แƒ แƒ“แƒแƒ›แƒแƒฃแƒ™แƒ˜แƒ“แƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ‘แƒ˜แƒ‘แƒšแƒ˜แƒแƒ—แƒ”แƒ™แƒ. แƒ›แƒแƒ’แƒ แƒแƒ›, แƒ แƒแƒ’แƒแƒ แƒช แƒ’แƒแƒ˜แƒ แƒ™แƒ•แƒ (แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜ แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ˜แƒกแƒแƒก), แƒชแƒแƒšแƒ™แƒ”แƒฃแƒšแƒ˜ แƒกแƒ”แƒ แƒ˜แƒแƒ–แƒฃแƒšแƒ˜ แƒ‘แƒ˜แƒ‘แƒšแƒ˜แƒแƒ—แƒ”แƒ™แƒ”แƒ‘แƒ˜แƒก แƒžแƒแƒ•แƒœแƒ แƒจแƒ”แƒฃแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ. แƒ แƒ˜แƒ’แƒ”แƒ‘แƒ—แƒแƒœ แƒ“แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒแƒœ แƒแƒ แƒ˜แƒก แƒฎแƒฃแƒ—แƒ˜ แƒฌแƒšแƒ˜แƒก แƒฌแƒ˜แƒœแƒแƒœแƒ“แƒ”แƒšแƒ˜ 3 แƒฉแƒแƒ“แƒ”แƒœแƒ˜แƒก แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜, แƒแƒœ แƒ›แƒ˜แƒ‘แƒ›แƒฃแƒšแƒ˜ แƒฉแƒแƒ แƒฉแƒแƒ–แƒ”.

แƒ‘แƒ”แƒ•แƒ แƒ˜ แƒ›แƒกแƒ›แƒ”แƒœแƒ˜แƒ Symfony-แƒ–แƒ”, แƒ แƒแƒ’แƒแƒ แƒช แƒ˜แƒœแƒ“แƒ˜แƒ•แƒ˜แƒ“แƒฃแƒแƒšแƒฃแƒ แƒ˜ แƒกแƒแƒกแƒแƒ แƒ’แƒ”แƒ‘แƒšแƒ แƒ™แƒแƒ›แƒžแƒแƒœแƒ”แƒœแƒขแƒ”แƒ‘แƒ˜แƒก แƒ›แƒ˜แƒ›แƒฌแƒแƒ“แƒ”แƒ‘แƒšแƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘ แƒ“แƒ แƒฃแƒ™แƒ•แƒ” แƒ•แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘ แƒ–แƒแƒ’แƒ˜แƒ”แƒ แƒ— แƒ›แƒแƒ—แƒ’แƒแƒœแƒก. แƒแƒกแƒ”แƒ•แƒ” แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ Laravel-แƒ˜แƒก แƒ–แƒแƒ’แƒ˜แƒ”แƒ แƒ—แƒ˜ แƒœแƒ˜แƒ•แƒ—แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ, แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, แƒ›แƒแƒ—แƒ˜ ORM, แƒ—แƒแƒ•แƒแƒ“ แƒคแƒ แƒ”แƒ˜แƒ›แƒ”แƒ แƒ˜แƒก แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ”.

แƒกแƒ˜แƒ›แƒคแƒแƒœแƒ˜แƒ/แƒ›แƒ”แƒกแƒ”แƒœแƒฏแƒ”แƒ แƒ˜

แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜ แƒ™แƒแƒœแƒ“แƒ˜แƒ“แƒแƒขแƒ˜ แƒ›แƒแƒจแƒ˜แƒœแƒ•แƒ” แƒ˜แƒ“แƒ”แƒแƒšแƒฃแƒ แƒ˜ แƒ›แƒ”แƒฉแƒ•แƒ”แƒœแƒ แƒ“แƒ แƒฃแƒ”แƒญแƒ•แƒ”แƒšแƒแƒ“ แƒ“แƒแƒ•แƒแƒงแƒ”แƒœแƒ”. แƒ›แƒแƒ’แƒ แƒแƒ› แƒฃแƒคแƒ แƒ แƒ แƒ—แƒฃแƒšแƒ˜ แƒแƒฆแƒ›แƒแƒฉแƒœแƒ“แƒ Symfony-แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒ— แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ”แƒ‘แƒ˜แƒก แƒ’แƒฃแƒ’แƒšแƒ˜. แƒ แƒแƒ’แƒแƒ  แƒจแƒ”แƒ•แƒ˜แƒ™แƒ แƒ˜แƒ‘แƒแƒ— แƒ™แƒšแƒแƒกแƒ”แƒ‘แƒ˜แƒ“แƒแƒœ แƒฃแƒœแƒ˜แƒ•แƒ”แƒ แƒกแƒแƒšแƒฃแƒ แƒ˜, แƒฃแƒแƒ–แƒ แƒ แƒกแƒแƒฎแƒ”แƒšแƒ”แƒ‘แƒ˜แƒ—, แƒแƒ•แƒขแƒแƒ‘แƒฃแƒกแƒ˜ แƒจแƒ”แƒขแƒงแƒแƒ‘แƒ˜แƒœแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ“แƒแƒกแƒแƒชแƒ”แƒ›แƒแƒ“ แƒ“แƒ แƒ—แƒฃแƒœแƒ“แƒแƒช Redis-แƒ–แƒ”?

PHP backend-แƒ˜แƒก แƒ’แƒแƒ“แƒแƒขแƒแƒœแƒ Redis streams แƒแƒ•แƒขแƒแƒ‘แƒฃแƒกแƒจแƒ˜ แƒ“แƒ แƒแƒ แƒฉแƒ”แƒ•แƒ แƒฉแƒแƒ แƒฉแƒ-แƒ“แƒแƒ›แƒแƒฃแƒ™แƒ˜แƒ“แƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ‘แƒ˜แƒ‘แƒšแƒ˜แƒแƒ—แƒ”แƒ™แƒ

แƒแƒคแƒ˜แƒชแƒ˜แƒแƒšแƒฃแƒ  แƒกแƒแƒ˜แƒขแƒ–แƒ” แƒ“แƒแƒ™แƒฃแƒ›แƒ”แƒœแƒขแƒแƒชแƒ˜แƒ แƒกแƒแƒ™แƒ›แƒแƒแƒ“ แƒ“แƒ”แƒขแƒแƒšแƒฃแƒ แƒ˜ แƒ˜แƒงแƒ, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ˜แƒœแƒ˜แƒชแƒ˜แƒแƒšแƒ˜แƒ–แƒแƒชแƒ˜แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ Symfony-แƒกแƒ—แƒ•แƒ˜แƒก แƒ˜แƒงแƒ แƒแƒฆแƒฌแƒ”แƒ แƒ˜แƒšแƒ˜ แƒ›แƒแƒ—แƒ˜ แƒกแƒแƒงแƒ•แƒแƒ แƒ”แƒšแƒ˜ YML แƒ“แƒ แƒกแƒฎแƒ•แƒ แƒฏแƒแƒ“แƒแƒกแƒœแƒฃแƒ แƒ˜ แƒ›แƒ”แƒ—แƒแƒ“แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ— แƒแƒ แƒแƒกแƒ˜แƒ›แƒคแƒแƒœแƒ˜แƒกแƒขแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. แƒแƒ  แƒ›แƒแƒ˜แƒœแƒขแƒ”แƒ แƒ”แƒกแƒ”แƒ‘แƒ“แƒ แƒ—แƒแƒ•แƒแƒ“ แƒ˜แƒœแƒกแƒขแƒแƒšแƒแƒชแƒ˜แƒ˜แƒก แƒžแƒ แƒแƒชแƒ”แƒกแƒ˜, แƒ’แƒแƒœแƒกแƒแƒ™แƒฃแƒ—แƒ แƒ”แƒ‘แƒ˜แƒ— แƒกแƒแƒแƒฎแƒแƒšแƒฌแƒšแƒ แƒแƒ แƒ“แƒแƒ“แƒ”แƒ’แƒ”แƒ‘แƒ˜แƒก แƒ“แƒ แƒแƒก. แƒ›แƒแƒ’แƒ แƒแƒ› แƒ›แƒ” แƒแƒ›แƒ˜แƒก แƒ’แƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒ แƒ›แƒแƒฃแƒšแƒแƒ“แƒœแƒ”แƒšแƒแƒ“ แƒ“แƒ˜แƒ“แƒ˜ แƒฎแƒœแƒ˜แƒก แƒ’แƒแƒœแƒ›แƒแƒ•แƒšแƒแƒ‘แƒแƒจแƒ˜ แƒ›แƒแƒ›แƒ˜แƒฌแƒ˜แƒ.

แƒ˜แƒ›แƒ˜แƒก แƒ’แƒแƒ แƒ™แƒ•แƒ”แƒ•แƒ, แƒ—แƒฃ แƒ แƒแƒ’แƒแƒ  แƒฃแƒœแƒ“แƒ แƒจแƒ”แƒฅแƒ›แƒœแƒแƒ— แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ Symfony-แƒ˜แƒก แƒฌแƒงแƒแƒ แƒแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—, แƒแƒกแƒ”แƒ•แƒ” แƒแƒ  แƒแƒ แƒ˜แƒก แƒงแƒ•แƒ”แƒšแƒแƒ–แƒ” แƒขแƒ แƒ˜แƒ•แƒ˜แƒแƒšแƒฃแƒ แƒ˜ แƒแƒ›แƒแƒชแƒแƒœแƒ แƒ›แƒญแƒ˜แƒ“แƒ แƒ แƒ•แƒแƒ“แƒ˜แƒ—:

PHP backend-แƒ˜แƒก แƒ’แƒแƒ“แƒแƒขแƒแƒœแƒ Redis streams แƒแƒ•แƒขแƒแƒ‘แƒฃแƒกแƒจแƒ˜ แƒ“แƒ แƒแƒ แƒฉแƒ”แƒ•แƒ แƒฉแƒแƒ แƒฉแƒ-แƒ“แƒแƒ›แƒแƒฃแƒ™แƒ˜แƒ“แƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ‘แƒ˜แƒ‘แƒšแƒ˜แƒแƒ—แƒ”แƒ™แƒ

แƒแƒ› แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒจแƒ˜ แƒฉแƒแƒฆแƒ แƒ›แƒแƒ•แƒ”แƒ‘แƒ˜แƒก แƒ“แƒ แƒฎแƒ”แƒšแƒ”แƒ‘แƒ˜แƒ— แƒ แƒแƒฆแƒแƒชแƒ˜แƒก แƒ’แƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ›แƒ˜แƒ•แƒ”แƒ“แƒ˜ แƒ˜แƒ› แƒ“แƒแƒกแƒ™แƒ•แƒœแƒแƒ›แƒ“แƒ”, แƒ แƒแƒ› แƒ แƒแƒฆแƒแƒช แƒงแƒแƒ•แƒแƒ แƒฏแƒœแƒ”แƒ‘แƒก แƒ•แƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒ“แƒ˜ แƒ“แƒ แƒ’แƒแƒ“แƒแƒ•แƒฌแƒงแƒ•แƒ˜แƒขแƒ” แƒกแƒฎแƒ•แƒ แƒ แƒแƒ› แƒ›แƒ”แƒชแƒแƒ“แƒ.

แƒ’แƒแƒœแƒแƒ—แƒ”แƒ‘แƒฃแƒšแƒ˜/แƒ แƒ˜แƒ’แƒ˜

แƒแƒฆแƒ›แƒแƒฉแƒœแƒ“แƒ, แƒ แƒแƒ› แƒ”แƒก แƒ‘แƒ˜แƒ‘แƒšแƒ˜แƒแƒ—แƒ”แƒ™แƒ แƒ›แƒญแƒ˜แƒ“แƒ แƒแƒ“ แƒ˜แƒงแƒ แƒ›แƒ˜แƒ‘แƒ›แƒฃแƒšแƒ˜ Laravel-แƒ˜แƒก แƒ˜แƒœแƒคแƒ แƒแƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒแƒกแƒ—แƒแƒœ แƒ“แƒ แƒกแƒฎแƒ•แƒ แƒ“แƒแƒ›แƒแƒ™แƒ˜แƒ“แƒ”แƒ‘แƒฃแƒšแƒ”แƒ‘แƒ”แƒ‘แƒ—แƒแƒœ, แƒแƒ›แƒ˜แƒขแƒแƒ› แƒ›แƒแƒกแƒ–แƒ” แƒ“แƒ˜แƒ“แƒ˜ แƒ“แƒ แƒ แƒแƒ  แƒ“แƒแƒ•แƒฎแƒแƒ แƒฏแƒ”: แƒ“แƒแƒ•แƒแƒ˜แƒœแƒกแƒขแƒแƒšแƒ˜แƒ แƒ”, แƒ“แƒแƒ•แƒแƒ™แƒ•แƒ˜แƒ แƒ“แƒ˜, แƒ•แƒœแƒแƒฎแƒ” แƒ“แƒแƒ›แƒแƒ™แƒ˜แƒ“แƒ”แƒ‘แƒฃแƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜ แƒ“แƒ แƒฌแƒแƒ•แƒจแƒแƒšแƒ”.

yiisoft/yii2-แƒ แƒ˜แƒ’แƒ˜

แƒ™แƒแƒ แƒ’แƒแƒ“, แƒแƒฅ แƒ›แƒแƒจแƒ˜แƒœแƒ•แƒ” แƒ•แƒ˜แƒ•แƒแƒ แƒแƒฃแƒ“แƒแƒ— แƒกแƒแƒฎแƒ”แƒšแƒ˜แƒ“แƒแƒœ, แƒ˜แƒกแƒ”แƒ• แƒ›แƒ™แƒแƒชแƒ แƒ˜ แƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ˜ Yii2-แƒ—แƒแƒœ. แƒ›แƒ” แƒ›แƒแƒ›แƒ˜แƒฌแƒ˜แƒ แƒแƒ› แƒ‘แƒ˜แƒ‘แƒšแƒ˜แƒแƒ—แƒ”แƒ™แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒ“แƒ แƒ”แƒก แƒแƒ  แƒ˜แƒงแƒ แƒชแƒฃแƒ“แƒ˜, แƒ›แƒแƒ’แƒ แƒแƒ› แƒแƒ  แƒ›แƒ˜แƒคแƒ˜แƒฅแƒ แƒ˜แƒ แƒ˜แƒ›แƒแƒ–แƒ”, แƒ แƒแƒ› แƒ”แƒก แƒ›แƒ—แƒšแƒ˜แƒแƒœแƒแƒ“ แƒ“แƒแƒ›แƒแƒ™แƒ˜แƒ“แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ Yii2-แƒ–แƒ”.

แƒกแƒฎแƒ•แƒ

แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜, แƒ แƒแƒช แƒแƒฆแƒ›แƒแƒ•แƒแƒฉแƒ˜แƒœแƒ” GitHub-แƒ–แƒ”, แƒ˜แƒงแƒ แƒแƒ แƒแƒกแƒแƒœแƒ“แƒ, แƒ›แƒแƒซแƒ•แƒ”แƒšแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ“แƒ แƒ›แƒ˜แƒขแƒแƒ•แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒžแƒ แƒแƒ”แƒฅแƒขแƒ”แƒ‘แƒ˜ แƒ•แƒแƒ แƒกแƒ™แƒ•แƒšแƒแƒ•แƒ”แƒ‘แƒ˜แƒก, แƒฉแƒแƒœแƒ’แƒšแƒ”แƒ‘แƒ˜แƒกแƒ แƒ“แƒ แƒ“แƒ˜แƒ“แƒ˜ แƒ แƒแƒแƒ“แƒ”แƒœแƒแƒ‘แƒ˜แƒก แƒ•แƒแƒšแƒ“แƒ”แƒ‘แƒฃแƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ”.

แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒ symfony/messenger-แƒ–แƒ”, แƒขแƒ”แƒฅแƒœแƒ˜แƒ™แƒฃแƒ  แƒ“แƒ”แƒขแƒแƒšแƒ”แƒ‘แƒ–แƒ”

แƒ›แƒ” แƒฃแƒœแƒ“แƒ แƒ’แƒแƒ›แƒ”แƒ’แƒ แƒ”แƒก แƒ‘แƒ˜แƒ‘แƒšแƒ˜แƒแƒ—แƒ”แƒ™แƒ แƒ“แƒ, แƒ’แƒแƒ แƒ™แƒ•แƒ”แƒฃแƒšแƒ˜ แƒ“แƒ แƒแƒ˜แƒก แƒ’แƒแƒขแƒแƒ แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’, แƒจแƒ”แƒ•แƒซแƒ”แƒšแƒ˜. แƒแƒฆแƒ›แƒแƒฉแƒœแƒ“แƒ, แƒ แƒแƒ› แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒกแƒแƒ™แƒ›แƒแƒแƒ“ แƒšแƒแƒ™แƒแƒœแƒฃแƒ แƒ˜ แƒ“แƒ แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜ แƒ˜แƒงแƒ. แƒแƒ•แƒขแƒแƒ‘แƒฃแƒกแƒ˜แƒก แƒ’แƒแƒ›แƒแƒกแƒแƒงแƒ”แƒœแƒ”แƒ‘แƒšแƒแƒ“ แƒžแƒแƒขแƒแƒ แƒ แƒฅแƒแƒ แƒฎแƒแƒœแƒ แƒ’แƒแƒ•แƒแƒ™แƒ”แƒ—แƒ”, แƒ แƒแƒ“แƒ’แƒแƒœ... แƒ›แƒ” แƒฃแƒœแƒ“แƒ แƒ›แƒฅแƒแƒœแƒแƒ“แƒ แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒกแƒแƒ‘แƒฃแƒ แƒแƒ•แƒ˜ แƒ“แƒ แƒกแƒฎแƒ•แƒแƒ“แƒแƒกแƒฎแƒ•แƒ แƒขแƒแƒ แƒ”แƒ‘แƒ˜แƒ—.

PHP backend-แƒ˜แƒก แƒ’แƒแƒ“แƒแƒขแƒแƒœแƒ Redis streams แƒแƒ•แƒขแƒแƒ‘แƒฃแƒกแƒจแƒ˜ แƒ“แƒ แƒแƒ แƒฉแƒ”แƒ•แƒ แƒฉแƒแƒ แƒฉแƒ-แƒ“แƒแƒ›แƒแƒฃแƒ™แƒ˜แƒ“แƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ‘แƒ˜แƒ‘แƒšแƒ˜แƒแƒ—แƒ”แƒ™แƒ

แƒกแƒฃแƒš แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒœแƒแƒ‘แƒ˜แƒฏแƒ˜:

  • แƒฉแƒ•แƒ”แƒœ แƒ•แƒฅแƒ›แƒœแƒ˜แƒ— แƒจแƒ”แƒขแƒงแƒแƒ‘แƒ˜แƒœแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒ›แƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒšแƒ”แƒ‘แƒก, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒ’แƒแƒ›แƒแƒซแƒแƒฎแƒ”แƒ‘แƒแƒ“แƒ˜ แƒฃแƒœแƒ“แƒ แƒ˜แƒงแƒแƒก
  • แƒฉแƒ•แƒ”แƒœ แƒ•แƒแƒฎแƒ•แƒ”แƒ•แƒ— แƒ›แƒแƒ— HandlerDescriptor-แƒจแƒ˜ (แƒ™แƒšแƒแƒกแƒ˜ แƒ‘แƒ˜แƒ‘แƒšแƒ˜แƒแƒ—แƒ”แƒ™แƒ˜แƒ“แƒแƒœ)
  • แƒฉแƒ•แƒ”แƒœ แƒ•แƒแƒฎแƒ•แƒ”แƒ•แƒ— แƒแƒ› โ€žแƒแƒฆแƒ›แƒฌแƒ”แƒ แƒ”แƒ‘แƒกโ€œ HandlersLocator-แƒ˜แƒก แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒจแƒ˜
  • HandlersLocator-แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ MessageBus แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ–แƒ”
  • แƒฉแƒ•แƒ”แƒœ แƒ’แƒแƒ“แƒแƒ•แƒชแƒ”แƒ›แƒ— `SenderInterface`-แƒ˜แƒก แƒ™แƒแƒ›แƒžแƒšแƒ”แƒฅแƒขแƒก SendersLocator-แƒก, แƒฉแƒ”แƒ›แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ `RedisTransport` แƒ™แƒšแƒแƒกแƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ”แƒ‘แƒก, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒแƒจแƒ™แƒแƒ แƒแƒ“.
  • SendersLocator-แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ MessageBus แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ–แƒ”

MessageBus-แƒก แƒแƒฅแƒ•แƒก `->dispatch()` แƒ›แƒ”แƒ—แƒแƒ“แƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ”แƒซแƒ”แƒ‘แƒก แƒจแƒ”แƒกแƒแƒ‘แƒแƒ›แƒ˜แƒก แƒ“แƒแƒ›แƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒšแƒ”แƒ‘แƒก HandlersLocator-แƒจแƒ˜ แƒ“แƒ แƒ’แƒแƒ“แƒแƒกแƒชแƒ”แƒ›แƒก แƒ›แƒแƒ— แƒจแƒ”แƒขแƒงแƒแƒ‘แƒ˜แƒœแƒ”แƒ‘แƒแƒก แƒจแƒ”แƒกแƒแƒ‘แƒแƒ›แƒ˜แƒกแƒ˜ `SenderInterface`-แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ— แƒแƒ•แƒขแƒแƒ‘แƒฃแƒกแƒ˜แƒ— แƒ’แƒแƒกแƒแƒ’แƒ–แƒแƒ•แƒœแƒแƒ“ (Redis แƒœแƒแƒ™แƒแƒ“แƒ”แƒ‘แƒ˜).

แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒ˜แƒก แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒแƒจแƒ˜ (แƒแƒ› แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ php-di), แƒ›แƒ—แƒ”แƒšแƒ˜ แƒžแƒแƒ™แƒ”แƒขแƒ˜แƒก แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ แƒแƒกแƒ”:

        CONTAINER_REDIS_TRANSPORT_SECRET => function (ContainerInterface $c) {
            return new RedisTransport(
                $c->get(CONTAINER_REDIS_STREAM_CONNECTION_SECRET),
                $c->get(CONTAINER_SERIALIZER))
            ;
        },
        CONTAINER_REDIS_TRANSPORT_LOG => function (ContainerInterface $c) {
            return new RedisTransport(
                $c->get(CONTAINER_REDIS_STREAM_CONNECTION_LOG),
                $c->get(CONTAINER_SERIALIZER))
            ;
        },
        CONTAINER_REDIS_STREAM_RECEIVER_SECRET => function (ContainerInterface $c) {
            return new RedisReceiver(
                $c->get(CONTAINER_REDIS_STREAM_CONNECTION_SECRET),
                $c->get(CONTAINER_SERIALIZER)
            );
        },
        CONTAINER_REDIS_STREAM_RECEIVER_LOG => function (ContainerInterface $c) {
            return new RedisReceiver(
                $c->get(CONTAINER_REDIS_STREAM_CONNECTION_LOG),
                $c->get(CONTAINER_SERIALIZER)
            );
        },
        CONTAINER_REDIS_STREAM_BUS => function (ContainerInterface $c) {
            $sendersLocator = new SendersLocator([
                AppMessagesSecretJsonMessages::class => [CONTAINER_REDIS_TRANSPORT_SECRET],
                AppMessagesDaemonLogMessage::class => [CONTAINER_REDIS_TRANSPORT_LOG],
            ], $c);
            $middleware[] = new SendMessageMiddleware($sendersLocator);

            return new MessageBus($middleware);
        },
        CONTAINER_REDIS_STREAM_CONNECTION_SECRET => function (ContainerInterface $c) {
            $host = 'bu-02-redis';
            $port = 6379;
            $dsn = "redis://$host:$port";
            $options = [
                'stream' => 'secret',
                'group' => 'default',
                'consumer' => 'default',
            ];

            return Connection::fromDsn($dsn, $options);
        },
        CONTAINER_REDIS_STREAM_CONNECTION_LOG => function (ContainerInterface $c) {
            $host = 'bu-02-redis';
            $port = 6379;
            $dsn = "redis://$host:$port";
            $options = [
                'stream' => 'log',
                'group' => 'default',
                'consumer' => 'default',
            ];

            return Connection::fromDsn($dsn, $options);
        },

แƒแƒฅ แƒฎแƒ”แƒ“แƒแƒ•แƒ—, แƒ แƒแƒ› SendersLocator-แƒจแƒ˜ แƒฉแƒ•แƒ”แƒœ แƒ›แƒ˜แƒ•แƒฃแƒ—แƒ˜แƒ—แƒ”แƒ— แƒกแƒฎแƒ•แƒแƒ“แƒแƒกแƒฎแƒ•แƒ โ€žแƒขแƒ แƒแƒœแƒกแƒžแƒแƒ แƒขแƒ˜โ€œ แƒแƒ แƒ˜ แƒ’แƒแƒœแƒกแƒฎแƒ•แƒแƒ•แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒจแƒ”แƒขแƒงแƒแƒ‘แƒ˜แƒœแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ แƒแƒ›แƒ”แƒšแƒ—แƒแƒ’แƒแƒœ แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒšแƒก แƒแƒฅแƒ•แƒก แƒกแƒแƒ™แƒฃแƒ—แƒแƒ แƒ˜ แƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ˜ แƒจแƒ”แƒกแƒแƒ‘แƒแƒ›แƒ˜แƒก แƒœแƒแƒ™แƒแƒ“แƒ”แƒ‘แƒ—แƒแƒœ.

แƒ›แƒ” แƒ’แƒแƒ•แƒแƒ™แƒ”แƒ—แƒ” แƒชแƒแƒšแƒ™แƒ” แƒ“แƒ”แƒ›แƒ แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒจแƒ˜แƒช แƒ“แƒ”แƒ›แƒแƒœแƒกแƒขแƒ แƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒกแƒแƒ›แƒ˜ แƒ“แƒ”แƒ›แƒแƒœแƒ˜แƒก แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒ”แƒ แƒ—แƒ›แƒแƒœแƒ”แƒ—แƒ—แƒแƒœ แƒฃแƒ แƒ—แƒ˜แƒ”แƒ แƒ—แƒแƒ‘แƒ”แƒœ แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜ แƒแƒ•แƒขแƒแƒ‘แƒฃแƒกแƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—: https://github.com/backend-university/products/tree/master/products/02-redis-streams-bus.

แƒ›แƒแƒ’แƒ แƒแƒ› แƒ›แƒ” แƒ’แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ—, แƒ แƒแƒ’แƒแƒ  แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ˜แƒงแƒแƒก แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ˜แƒก แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ:

use AppMessagesDaemonLogMessage;
use SymfonyComponentMessengerHandlerHandlerDescriptor;
use SymfonyComponentMessengerHandlerHandlersLocator;
use SymfonyComponentMessengerMessageBus;
use SymfonyComponentMessengerMiddlewareHandleMessageMiddleware;
use SymfonyComponentMessengerMiddlewareSendMessageMiddleware;
use SymfonyComponentMessengerTransportSenderSendersLocator;

require_once __DIR__ . '/../vendor/autoload.php';
/** @var PsrContainerContainerInterface $container */
$container = require_once('config/container.php');

$handlers = [
    DaemonLogMessage::class => [
        new HandlerDescriptor(
            function (DaemonLogMessage $m) {
                error_log('DaemonLogHandler: message handled: / ' . $m->getMessage());
            },
            ['from_transport' => CONTAINER_REDIS_TRANSPORT_LOG]
        )
    ],
];
$middleware = [];
$middleware[] = new HandleMessageMiddleware(new HandlersLocator($handlers));
$sendersLocator = new SendersLocator(['*' => [CONTAINER_REDIS_TRANSPORT_LOG]], $container);
$middleware[] = new SendMessageMiddleware($sendersLocator);

$bus = new MessageBus($middleware);
$receivers = [
    CONTAINER_REDIS_TRANSPORT_LOG => $container->get(CONTAINER_REDIS_STREAM_RECEIVER_LOG),
];
$w = new SymfonyComponentMessengerWorker($receivers, $bus, $container->get(CONTAINER_EVENT_DISPATCHER));
$w->run();

แƒแƒ› แƒ˜แƒœแƒคแƒ แƒแƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒแƒจแƒ˜

แƒแƒ•แƒขแƒแƒ‘แƒฃแƒกแƒ˜แƒก แƒ“แƒแƒœแƒ”แƒ แƒ’แƒ•แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’, แƒ›แƒ” แƒ’แƒแƒ›แƒแƒ•แƒงแƒแƒ•แƒ˜ แƒชแƒแƒšแƒ™แƒ”แƒฃแƒšแƒ˜ แƒ”แƒขแƒแƒžแƒ”แƒ‘แƒ˜ แƒซแƒ•แƒ”แƒšแƒ˜ แƒกแƒ˜แƒœแƒฅแƒ แƒแƒœแƒฃแƒšแƒ˜ แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ˜แƒกแƒ’แƒแƒœ แƒ“แƒ แƒ“แƒแƒ•แƒแƒ›แƒ–แƒแƒ“แƒ” แƒชแƒแƒšแƒ™แƒ”แƒฃแƒšแƒ˜ แƒ“แƒแƒ›แƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒšแƒ”แƒ‘แƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ—แƒแƒ’แƒแƒœ แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒšแƒ˜ แƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒก แƒ—แƒแƒ•แƒ˜แƒก แƒกแƒแƒฅแƒ›แƒ”แƒก.

แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒแƒจแƒ˜ แƒแƒฎแƒแƒšแƒ˜ แƒกแƒแƒ˜แƒขแƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ˜แƒก แƒ›แƒ˜แƒšแƒกแƒแƒ“แƒ”แƒœแƒ˜ แƒแƒกแƒ” แƒ’แƒแƒ›แƒแƒ˜แƒงแƒฃแƒ แƒ”แƒ‘แƒแƒ“แƒ:

PHP backend-แƒ˜แƒก แƒ’แƒแƒ“แƒแƒขแƒแƒœแƒ Redis streams แƒแƒ•แƒขแƒแƒ‘แƒฃแƒกแƒจแƒ˜ แƒ“แƒ แƒแƒ แƒฉแƒ”แƒ•แƒ แƒฉแƒแƒ แƒฉแƒ-แƒ“แƒแƒ›แƒแƒฃแƒ™แƒ˜แƒ“แƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ‘แƒ˜แƒ‘แƒšแƒ˜แƒแƒ—แƒ”แƒ™แƒ

แƒ“แƒ แƒแƒ›แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ›แƒแƒจแƒ˜แƒœแƒ•แƒ”, แƒฉแƒ”แƒ›แƒ—แƒ•แƒ˜แƒก แƒ‘แƒ”แƒ•แƒ แƒแƒ“ แƒฃแƒคแƒ แƒ แƒแƒ“แƒ•แƒ˜แƒšแƒ˜ แƒ’แƒแƒฎแƒ“แƒ แƒแƒฎแƒแƒšแƒ˜ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ, แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, Rss-แƒ˜แƒก แƒแƒ›แƒแƒฆแƒ”แƒ‘แƒ แƒ“แƒ แƒแƒœแƒแƒšแƒ˜แƒ–แƒ˜. แƒ˜แƒ›แƒ˜แƒขแƒแƒ› แƒ แƒแƒ› แƒ”แƒก แƒžแƒ แƒแƒชแƒ”แƒกแƒ˜ แƒแƒกแƒ”แƒ•แƒ” แƒ›แƒแƒ˜แƒ—แƒฎแƒแƒ•แƒก แƒแƒ แƒ˜แƒ’แƒ˜แƒœแƒแƒšแƒฃแƒ  แƒจแƒ˜แƒœแƒแƒแƒ แƒกแƒก, แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ RSS แƒ‘แƒ›แƒฃแƒšแƒ˜แƒก แƒแƒ›แƒแƒ›แƒงแƒ•แƒแƒœแƒ˜ แƒ“แƒแƒ›แƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒ”แƒšแƒ˜, แƒ แƒแƒ’แƒแƒ แƒ˜แƒชแƒแƒ WebsiteIndexHistoryPersistor, แƒ’แƒแƒ›แƒแƒ˜แƒฌแƒ”แƒ แƒก แƒจแƒ”แƒขแƒงแƒแƒ‘แƒ˜แƒœแƒ”แƒ‘แƒแƒก โ€žContent/HtmlContentโ€œ, แƒแƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒก แƒ›แƒแƒก แƒ“แƒ แƒ’แƒแƒ“แƒแƒกแƒชแƒ”แƒ›แƒก แƒกแƒแƒกแƒฃแƒ แƒ•แƒ”แƒš แƒจแƒ”แƒขแƒงแƒแƒ‘แƒ˜แƒœแƒ”แƒ‘แƒแƒก แƒ›แƒ˜แƒกแƒ˜ แƒ›แƒ˜แƒšแƒกแƒแƒ“แƒ”แƒœแƒ˜แƒก แƒ’แƒแƒกแƒฌแƒ•แƒ แƒ˜แƒ•.

PHP backend-แƒ˜แƒก แƒ’แƒแƒ“แƒแƒขแƒแƒœแƒ Redis streams แƒแƒ•แƒขแƒแƒ‘แƒฃแƒกแƒจแƒ˜ แƒ“แƒ แƒแƒ แƒฉแƒ”แƒ•แƒ แƒฉแƒแƒ แƒฉแƒ-แƒ“แƒแƒ›แƒแƒฃแƒ™แƒ˜แƒ“แƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ‘แƒ˜แƒ‘แƒšแƒ˜แƒแƒ—แƒ”แƒ™แƒ

แƒกแƒแƒ‘แƒแƒšแƒแƒแƒ“, แƒฉแƒ•แƒ”แƒœ แƒ›แƒ˜แƒ•แƒ˜แƒฆแƒ”แƒ— แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒ“แƒ”แƒ›แƒแƒœแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ—แƒแƒ’แƒแƒœ แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒšแƒ˜ แƒ˜แƒœแƒแƒ แƒฉแƒฃแƒœแƒ”แƒ‘แƒก แƒ™แƒแƒ•แƒจแƒ˜แƒ แƒก แƒ›แƒฎแƒแƒšแƒแƒ“ แƒกแƒแƒญแƒ˜แƒ แƒ แƒ แƒ”แƒกแƒฃแƒ แƒกแƒ”แƒ‘แƒ—แƒแƒœ. แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“ แƒ“แƒ”แƒ›แƒแƒœแƒ˜ crawlers แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก แƒงแƒ•แƒ”แƒšแƒ แƒ“แƒแƒ›แƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒ”แƒšแƒก, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ›แƒแƒ˜แƒ—แƒฎแƒแƒ•แƒก แƒ˜แƒœแƒขแƒ”แƒ แƒœแƒ”แƒขแƒจแƒ˜ แƒจแƒ”แƒกแƒ•แƒšแƒแƒก แƒจแƒ˜แƒœแƒแƒแƒ แƒกแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ“แƒ แƒ“แƒ”แƒ›แƒแƒœแƒก แƒ’แƒแƒ’แƒ แƒซแƒ”แƒšแƒ“แƒ”แƒก แƒคแƒšแƒแƒ‘แƒก แƒ™แƒแƒ•แƒจแƒ˜แƒ แƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒแƒกแƒ—แƒแƒœ.

แƒแƒฎแƒšแƒ, แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒ˜แƒ“แƒแƒœ แƒแƒ แƒฉแƒ”แƒ•แƒ˜แƒก แƒœแƒแƒชแƒ•แƒšแƒแƒ“, แƒกแƒแƒญแƒ˜แƒ แƒ ID-แƒ”แƒ‘แƒ˜ แƒ›แƒฃแƒ“แƒ›แƒ˜แƒ•แƒ˜ แƒฉแƒแƒกแƒ›แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒแƒ•แƒขแƒแƒ‘แƒฃแƒกแƒ˜แƒ— แƒ’แƒแƒ“แƒแƒ”แƒชแƒ”แƒ›แƒ แƒงแƒ•แƒ”แƒšแƒ แƒ“แƒแƒ˜แƒœแƒขแƒ”แƒ แƒ”แƒกแƒ”แƒ‘แƒฃแƒš แƒ“แƒแƒ›แƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒ”แƒšแƒก.

แƒฌแƒงแƒแƒ แƒ: www.habr.com

แƒแƒฎแƒแƒšแƒ˜ แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ