{"id":103425,"date":"2025-03-27T19:58:49","date_gmt":"2025-03-27T15:28:49","guid":{"rendered":"https:\/\/nabfollower.com\/blog\/reaktiv-%d9%85%d8%af%db%8c%d8%b1%db%8c%d8%aa-%d8%ad%d8%a7%d9%84%d8%aa-%d9%88%d8%a7%da%a9%d9%86%d8%b4-%d9%be%d8%b0%db%8c%d8%b1-%d8%a8%d8%b1%d8%a7%db%8c-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86\/"},"modified":"2025-03-27T19:58:49","modified_gmt":"2025-03-27T15:28:49","slug":"reaktiv-%d9%85%d8%af%db%8c%d8%b1%db%8c%d8%aa-%d8%ad%d8%a7%d9%84%d8%aa-%d9%88%d8%a7%da%a9%d9%86%d8%b4-%d9%be%d8%b0%db%8c%d8%b1-%d8%a8%d8%b1%d8%a7%db%8c-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86","status":"publish","type":"post","link":"https:\/\/nabfollower.com\/blog\/reaktiv-%d9%85%d8%af%db%8c%d8%b1%db%8c%d8%aa-%d8%ad%d8%a7%d9%84%d8%aa-%d9%88%d8%a7%da%a9%d9%86%d8%b4-%d9%be%d8%b0%db%8c%d8%b1-%d8%a8%d8%b1%d8%a7%db%8c-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86\/","title":{"rendered":"Reaktiv: \u0645\u062f\u06cc\u0631\u06cc\u062a \u062d\u0627\u0644\u062a \u0648\u0627\u06a9\u0646\u0634 \u067e\u0630\u06cc\u0631 \u0628\u0631\u0627\u06cc \u067e\u0627\u06cc\u062a\u0648\u0646"},"content":{"rendered":"<div data-article-id=\"2360726\" id=\"article-body\">\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_85 counter-hierarchy ez-toc-counter-rtl ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">\u0641\u0647\u0631\u0633\u062a \u0645\u0637\u0627\u0644\u0628<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"\u062a\u063a\u06cc\u06cc\u0631 \u0648\u0636\u0639\u06cc\u062a \u0641\u0647\u0631\u0633\u062a \u0645\u0637\u0627\u0644\u0628\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/nabfollower.com\/blog\/reaktiv-%d9%85%d8%af%db%8c%d8%b1%db%8c%d8%aa-%d8%ad%d8%a7%d9%84%d8%aa-%d9%88%d8%a7%da%a9%d9%86%d8%b4-%d9%be%d8%b0%db%8c%d8%b1-%d8%a8%d8%b1%d8%a7%db%8c-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86\/#%D9%85%D8%B9%D8%B6%D9%84_%D9%85%D8%AF%DB%8C%D8%B1%DB%8C%D8%AA_%D8%AF%D9%88%D9%84%D8%AA_%D8%AF%D8%B1_%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86\" >\u0645\u0639\u0636\u0644 \u0645\u062f\u06cc\u0631\u06cc\u062a \u062f\u0648\u0644\u062a \u062f\u0631 \u067e\u0627\u06cc\u062a\u0648\u0646<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/nabfollower.com\/blog\/reaktiv-%d9%85%d8%af%db%8c%d8%b1%db%8c%d8%aa-%d8%ad%d8%a7%d9%84%d8%aa-%d9%88%d8%a7%da%a9%d9%86%d8%b4-%d9%be%d8%b0%db%8c%d8%b1-%d8%a8%d8%b1%d8%a7%db%8c-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86\/#%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87_%D9%86%D9%88%DB%8C%D8%B3%DB%8C_%D9%88%D8%A7%DA%A9%D9%86%D8%B4%DB%8C_%DB%8C%DA%A9_%D8%AF%D8%B1%D8%B3_%D8%AA%D8%A7%D8%B1%DB%8C%D8%AE_30_%D8%AB%D8%A7%D9%86%DB%8C%D9%87_%D8%A7%DB%8C\" >\u0628\u0631\u0646\u0627\u0645\u0647 \u0646\u0648\u06cc\u0633\u06cc \u0648\u0627\u06a9\u0646\u0634\u06cc: \u06cc\u06a9 \u062f\u0631\u0633 \u062a\u0627\u0631\u06cc\u062e 30 \u062b\u0627\u0646\u06cc\u0647 \u0627\u06cc<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/nabfollower.com\/blog\/reaktiv-%d9%85%d8%af%db%8c%d8%b1%db%8c%d8%aa-%d8%ad%d8%a7%d9%84%d8%aa-%d9%88%d8%a7%da%a9%d9%86%d8%b4-%d9%be%d8%b0%db%8c%d8%b1-%d8%a8%d8%b1%d8%a7%db%8c-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86\/#%D9%85%D9%81%D8%A7%D9%87%DB%8C%D9%85_%D8%A7%D8%B5%D9%84%DB%8C_%D8%B3%DB%8C%DA%AF%D9%86%D8%A7%D9%84_%D9%87%D8%A7_%D8%8C_%D9%85%D8%AD%D8%A7%D8%B3%D8%A8%D9%87_%D8%B4%D8%AF%D9%87_%D9%88_%D8%A7%D8%AB%D8%B1%D8%A7%D8%AA\" >\u0645\u0641\u0627\u0647\u06cc\u0645 \u0627\u0635\u0644\u06cc: \u0633\u06cc\u06af\u0646\u0627\u0644 \u0647\u0627 \u060c \u0645\u062d\u0627\u0633\u0628\u0647 \u0634\u062f\u0647 \u0648 \u0627\u062b\u0631\u0627\u062a<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/nabfollower.com\/blog\/reaktiv-%d9%85%d8%af%db%8c%d8%b1%db%8c%d8%aa-%d8%ad%d8%a7%d9%84%d8%aa-%d9%88%d8%a7%da%a9%d9%86%d8%b4-%d9%be%d8%b0%db%8c%d8%b1-%d8%a8%d8%b1%d8%a7%db%8c-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86\/#%DA%86%D8%B1%D8%A7_Reaktiv_%D8%AF%D8%B1_%D8%B3%D9%86%D8%A7%D8%B1%DB%8C%D9%88%D9%87%D8%A7%DB%8C_%D8%AF%D9%86%DB%8C%D8%A7%DB%8C_%D9%88%D8%A7%D9%82%D8%B9%DB%8C_%D9%85%DB%8C_%D8%AF%D8%B1%D8%AE%D8%B4%D8%AF\" >\u0686\u0631\u0627 Reaktiv \u062f\u0631 \u0633\u0646\u0627\u0631\u06cc\u0648\u0647\u0627\u06cc \u062f\u0646\u06cc\u0627\u06cc \u0648\u0627\u0642\u0639\u06cc \u0645\u06cc \u062f\u0631\u062e\u0634\u062f<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/nabfollower.com\/blog\/reaktiv-%d9%85%d8%af%db%8c%d8%b1%db%8c%d8%aa-%d8%ad%d8%a7%d9%84%d8%aa-%d9%88%d8%a7%da%a9%d9%86%d8%b4-%d9%be%d8%b0%db%8c%d8%b1-%d8%a8%d8%b1%d8%a7%db%8c-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86\/#1_WebSockets_Fastapi_%D8%A8%D9%87_%D8%B1%D9%88%D8%B2%D8%B1%D8%B3%D8%A7%D9%86%DB%8C_%D9%87%D8%A7%DB%8C_%D8%B2%D9%85%D8%A7%D9%86_%D9%88%D8%A7%D9%82%D8%B9%DB%8C_%D8%A8%D8%AF%D9%88%D9%86_%D8%AF%DB%8C%DA%AF_%D8%A8%D8%AE%D8%A7%D8%B1\" >1. WebSockets Fastapi: \u0628\u0647 \u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0647\u0627\u06cc \u0632\u0645\u0627\u0646 \u0648\u0627\u0642\u0639\u06cc \u0628\u062f\u0648\u0646 \u062f\u06cc\u06af \u0628\u062e\u0627\u0631<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/nabfollower.com\/blog\/reaktiv-%d9%85%d8%af%db%8c%d8%b1%db%8c%d8%aa-%d8%ad%d8%a7%d9%84%d8%aa-%d9%88%d8%a7%da%a9%d9%86%d8%b4-%d9%be%d8%b0%db%8c%d8%b1-%d8%a8%d8%b1%d8%a7%db%8c-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86\/#2_%D8%B3%DB%8C%D8%B3%D8%AA%D9%85_%D9%87%D8%A7%DB%8C_IoT_%D9%88%D8%A7%DA%A9%D9%86%D8%B4_%D8%A8%D9%87_%D8%AF%D8%A7%D8%AF%D9%87_%D9%87%D8%A7%DB%8C_%D8%B3%D9%86%D8%B3%D9%88%D8%B1_%D9%88%D8%A7%DA%A9%D9%86%D8%B4_%D9%86%D8%B4%D8%A7%D9%86_%D9%85%DB%8C_%D8%AF%D9%87%D8%AF\" >2. \u0633\u06cc\u0633\u062a\u0645 \u0647\u0627\u06cc IoT: \u0648\u0627\u06a9\u0646\u0634 \u0628\u0647 \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u0633\u0646\u0633\u0648\u0631 \u0648\u0627\u06a9\u0646\u0634 \u0646\u0634\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/nabfollower.com\/blog\/reaktiv-%d9%85%d8%af%db%8c%d8%b1%db%8c%d8%aa-%d8%ad%d8%a7%d9%84%d8%aa-%d9%88%d8%a7%da%a9%d9%86%d8%b4-%d9%be%d8%b0%db%8c%d8%b1-%d8%a8%d8%b1%d8%a7%db%8c-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86\/#3_%D9%81%D8%B1%D8%A2%DB%8C%D9%86%D8%AF%D9%87%D8%A7%DB%8C_%D8%B7%D9%88%D9%84%D8%A7%D9%86%DB%8C_%D8%A8%D8%A7_%D8%AA%D8%B9%D8%A7%D9%85%D9%84_%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1\" >3. \u0641\u0631\u0622\u06cc\u0646\u062f\u0647\u0627\u06cc \u0637\u0648\u0644\u0627\u0646\u06cc \u0628\u0627 \u062a\u0639\u0627\u0645\u0644 \u06a9\u0627\u0631\u0628\u0631<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/nabfollower.com\/blog\/reaktiv-%d9%85%d8%af%db%8c%d8%b1%db%8c%d8%aa-%d8%ad%d8%a7%d9%84%d8%aa-%d9%88%d8%a7%da%a9%d9%86%d8%b4-%d9%be%d8%b0%db%8c%d8%b1-%d8%a8%d8%b1%d8%a7%db%8c-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86\/#%D8%B2%DB%8C%D8%B1_%DA%A9%D8%A7%D9%BE%D9%88%D8%AA_%DA%86%DA%AF%D9%88%D9%86%D9%87_ReakTiv_%D9%88%D8%A7%D8%A8%D8%B3%D8%AA%DA%AF%DB%8C_%D9%87%D8%A7_%D8%B1%D8%A7_%D8%B1%D8%AF%DB%8C%D8%A7%D8%A8%DB%8C_%D9%85%DB%8C_%DA%A9%D9%86%D8%AF\" >\u0632\u06cc\u0631 \u06a9\u0627\u067e\u0648\u062a: \u0686\u06af\u0648\u0646\u0647 ReakTiv \u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u0647\u0627 \u0631\u0627 \u0631\u062f\u06cc\u0627\u0628\u06cc \u0645\u06cc \u06a9\u0646\u062f<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/nabfollower.com\/blog\/reaktiv-%d9%85%d8%af%db%8c%d8%b1%db%8c%d8%aa-%d8%ad%d8%a7%d9%84%d8%aa-%d9%88%d8%a7%da%a9%d9%86%d8%b4-%d9%be%d8%b0%db%8c%d8%b1-%d8%a8%d8%b1%d8%a7%db%8c-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86\/#%D9%88%DB%8C%DA%98%DA%AF%DB%8C_%D9%87%D8%A7%DB%8C_%D9%BE%DB%8C%D8%B4%D8%B1%D9%81%D8%AA%D9%87_%D8%A8%D8%B1%D8%A7%DB%8C_%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87_%D8%A7%D8%B2_%D8%AA%D9%88%D9%84%DB%8C%D8%AF\" >\u0648\u06cc\u0698\u06af\u06cc \u0647\u0627\u06cc \u067e\u06cc\u0634\u0631\u0641\u062a\u0647 \u0628\u0631\u0627\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u062a\u0648\u0644\u06cc\u062f<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/nabfollower.com\/blog\/reaktiv-%d9%85%d8%af%db%8c%d8%b1%db%8c%d8%aa-%d8%ad%d8%a7%d9%84%d8%aa-%d9%88%d8%a7%da%a9%d9%86%d8%b4-%d9%be%d8%b0%db%8c%d8%b1-%d8%a8%d8%b1%d8%a7%db%8c-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86\/#%D9%85%D9%84%D8%A7%D8%AD%D8%B8%D8%A7%D8%AA_%D8%B9%D9%85%D9%84%DA%A9%D8%B1%D8%AF\" >\u0645\u0644\u0627\u062d\u0638\u0627\u062a \u0639\u0645\u0644\u06a9\u0631\u062f<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/nabfollower.com\/blog\/reaktiv-%d9%85%d8%af%db%8c%d8%b1%db%8c%d8%aa-%d8%ad%d8%a7%d9%84%d8%aa-%d9%88%d8%a7%da%a9%d9%86%d8%b4-%d9%be%d8%b0%db%8c%d8%b1-%d8%a8%d8%b1%d8%a7%db%8c-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86\/#%DA%86%D9%87_%D9%85%D9%88%D9%82%D8%B9_%D8%A7%D8%B2_ReakTiv_%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87_%DA%A9%D9%86%DB%8C%D8%AF_%D9%88_%DA%86%D9%87_%D9%85%D9%88%D9%82%D8%B9_%D9%86%DB%8C%D8%B3%D8%AA\" >\u0686\u0647 \u0645\u0648\u0642\u0639 \u0627\u0632 ReakTiv \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f (\u0648 \u0686\u0647 \u0645\u0648\u0642\u0639 \u0646\u06cc\u0633\u062a)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/nabfollower.com\/blog\/reaktiv-%d9%85%d8%af%db%8c%d8%b1%db%8c%d8%aa-%d8%ad%d8%a7%d9%84%d8%aa-%d9%88%d8%a7%da%a9%d9%86%d8%b4-%d9%be%d8%b0%db%8c%d8%b1-%d8%a8%d8%b1%d8%a7%db%8c-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86\/#%D9%88%D8%A7%DA%A9%D9%86%D8%B4_%D9%BE%D8%B0%DB%8C%D8%B1%DB%8C_%D8%B1%D8%A7_%D8%AF%D8%B1_%D8%A2%D8%BA%D9%88%D8%B4_%D8%A8%DA%AF%DB%8C%D8%B1%DB%8C%D8%AF_%D8%8C_%D8%A8%D8%A7%D8%B1_%D8%B4%D9%86%D8%A7%D8%AE%D8%AA%DB%8C_%D8%B1%D8%A7_%DA%A9%D8%A7%D9%87%D8%B4_%D8%AF%D9%87%DB%8C%D8%AF\" >\u0648\u0627\u06a9\u0646\u0634 \u067e\u0630\u06cc\u0631\u06cc \u0631\u0627 \u062f\u0631 \u0622\u063a\u0648\u0634 \u0628\u06af\u06cc\u0631\u06cc\u062f \u060c \u0628\u0627\u0631 \u0634\u0646\u0627\u062e\u062a\u06cc \u0631\u0627 \u06a9\u0627\u0647\u0634 \u062f\u0647\u06cc\u062f<\/a><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"%D9%85%D8%B9%D8%B6%D9%84_%D9%85%D8%AF%DB%8C%D8%B1%DB%8C%D8%AA_%D8%AF%D9%88%D9%84%D8%AA_%D8%AF%D8%B1_%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86\"><\/span>\n<p>  \u0645\u0639\u0636\u0644 \u0645\u062f\u06cc\u0631\u06cc\u062a \u062f\u0648\u0644\u062a \u062f\u0631 \u067e\u0627\u06cc\u062a\u0648\u0646<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0627\u06cc\u0646 \u0631\u0627 \u062a\u0635\u0648\u06cc\u0631 \u06a9\u0646\u06cc\u062f: \u0634\u0645\u0627 \u062f\u0631 \u062d\u0627\u0644 \u0637\u0631\u0627\u062d\u06cc \u06cc\u06a9 WebSocket FastAPI \u0628\u0631\u0627\u06cc \u067e\u062e\u0634 \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u0633\u0646\u0633\u0648\u0631 \u062f\u0631 \u0632\u0645\u0627\u0646 \u0648\u0627\u0642\u0639\u06cc \u0647\u0633\u062a\u06cc\u062f. \u06cc\u0627 \u06cc\u06a9 \u062e\u0637 \u0644\u0648\u0644\u0647 IoT \u0631\u0627 \u06a9\u0647 \u0628\u0647 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0645\u062d\u06cc\u0637\u06cc \u0648\u0627\u06a9\u0646\u0634 \u0646\u0634\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f \u060c \u0627\u0631\u06a9\u0633\u062a\u0631 \u0645\u06cc \u06a9\u0646\u062f. \u06cc\u0627 \u0633\u0627\u062e\u062a\u0646 \u06cc\u06a9 \u0627\u0628\u0632\u0627\u0631 CLI \u0637\u0648\u0644\u0627\u0646\u06cc \u0645\u062f\u062a \u06a9\u0647 UI \u062e\u0648\u062f \u0631\u0627 \u0628\u0631 \u0627\u0633\u0627\u0633 \u0648\u0631\u0648\u062f\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0628\u0647 \u0631\u0648\u0632 \u0645\u06cc \u06a9\u0646\u062f.  <\/p>\n<p>\u062f\u0631 \u062a\u0645\u0627\u0645 \u0627\u06cc\u0646 \u0633\u0646\u0627\u0631\u06cc\u0648\u0647\u0627 \u060c \u06cc\u06a9 \u0633\u0648\u0627\u0644 \u0645\u0647\u0645 \u067e\u06cc\u0634 \u0645\u06cc \u0622\u06cc\u062f: <strong>\u0686\u06af\u0648\u0646\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0628\u062f\u0648\u0646 \u063a\u0631\u0642 \u0634\u062f\u0646 \u062f\u0631 \u062f\u06cc\u06af \u0628\u062e\u0627\u0631 \u060c \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u062d\u0627\u0644\u062a \u0631\u0627 \u0628\u0647 \u0637\u0648\u0631 \u0645\u0624\u062b\u0631 \u062a\u0628\u0644\u06cc\u063a \u06a9\u0646\u06cc\u062f\u061f<\/strong>  <\/p>\n<p>\u0631\u0648\u06cc\u06a9\u0631\u062f\u0647\u0627\u06cc \u0633\u0646\u062a\u06cc-\u0627\u0634\u062a\u0631\u0627\u06a9 \u0647\u0627\u06cc \u062f\u0633\u062a\u06cc\u0627\u0631 \u060c \u0627\u0644\u06af\u0648\u0647\u0627\u06cc \u0646\u0627\u0638\u0631 \u06cc\u0627 <code>asyncio<\/code> \u062d\u0644\u0642\u0647 \u0647\u0627\u06cc \u0631\u0648\u06cc\u062f\u0627\u062f-\u0627\u063a\u0644\u0628 \u0645\u0646\u062c\u0631 \u0628\u0647:  <\/p>\n<ul>\n<li>\n<strong>\u06a9\u062f \u0627\u0633\u067e\u0627\u06af\u062a\u06cc:<\/strong> \u062a\u0645\u0627\u0633 \u062a\u0644\u0641\u0646\u06cc \u0645\u0627\u0646\u0646\u062f \u0633\u06cc\u0645 \u0647\u0627\u06cc \u0647\u062f\u0641\u0648\u0646 \u062f\u0631\u06af\u06cc\u0631 \u0634\u062f\u0647 \u0627\u0633\u062a.\n<\/li>\n<li>\n<strong>\u0646\u0634\u062a \u0645\u0646\u0627\u0628\u0639:<\/strong> \u0627\u0634\u062a\u0631\u0627\u06a9 \u0647\u0627\u06cc \u0641\u0631\u0627\u0645\u0648\u0634 \u0634\u062f\u0647 \u062d\u0627\u0641\u0638\u0647 \u0634\u0645\u0627 \u0631\u0627 \u0622\u0632\u0627\u0631 \u0645\u06cc \u062f\u0647\u062f.\n<\/li>\n<li>\n<strong>\u0627\u0634\u06a9\u0627\u0644\u0627\u062a \u0647\u0645\u0632\u0645\u0627\u0646\u06cc:<\/strong> \u0634\u0631\u0627\u06cc\u0637 \u0645\u0633\u0627\u0628\u0642\u0647 \u0627\u06cc \u06a9\u0647 \u0627\u0632 \u062a\u0648\u0636\u06cc\u062d \u0645\u0646\u0637\u0642\u06cc \u0633\u0631\u067e\u06cc\u0686\u06cc \u0645\u06cc \u06a9\u0646\u062f.\n<\/li>\n<\/ul>\n<p>\u0648\u0627\u0631\u062f \u06a9\u0631\u062f\u0646 <strong>\u062c\u062a<\/strong>\u060c \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 \u0627\u06cc \u06a9\u0647 \u067e\u0627\u0631\u0627\u062f\u0627\u06cc\u0645 \u0628\u0631\u0646\u0627\u0645\u0647 \u0646\u0648\u06cc\u0633\u06cc \u0648\u0627\u06a9\u0646\u0634\u06cc \u0631\u0627 \u0627\u0632 \u0686\u0627\u0631\u0686\u0648\u0628 \u0647\u0627\u06cc \u062c\u0628\u0647\u0647 \u0645\u0627\u0646\u0646\u062f Angular \u0648 SolidJ \u0647\u0627 \u0648\u0627\u0645 \u0645\u06cc \u06af\u06cc\u0631\u062f \u0648 \u0622\u0646 \u0631\u0627 \u0628\u0631\u0627\u06cc \u062c\u0647\u0627\u0646 \u0627\u0648\u0644\u06cc \u067e\u0627\u06cc\u062a\u0648\u0646 \u062a\u0637\u0628\u06cc\u0642 \u0645\u06cc \u062f\u0647\u062f.  <\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87_%D9%86%D9%88%DB%8C%D8%B3%DB%8C_%D9%88%D8%A7%DA%A9%D9%86%D8%B4%DB%8C_%DB%8C%DA%A9_%D8%AF%D8%B1%D8%B3_%D8%AA%D8%A7%D8%B1%DB%8C%D8%AE_30_%D8%AB%D8%A7%D9%86%DB%8C%D9%87_%D8%A7%DB%8C\"><\/span>\n<p>  \u0628\u0631\u0646\u0627\u0645\u0647 \u0646\u0648\u06cc\u0633\u06cc \u0648\u0627\u06a9\u0646\u0634\u06cc: \u06cc\u06a9 \u062f\u0631\u0633 \u062a\u0627\u0631\u06cc\u062e 30 \u062b\u0627\u0646\u06cc\u0647 \u0627\u06cc<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0648\u0627\u06a9\u0646\u0634 \u067e\u0630\u06cc\u0631\u06cc \u062f\u0631 \u0627\u06a9\u0648\u0633\u06cc\u0633\u062a\u0645 \u0647\u0627\u06cc \u062c\u0644\u0648\u06cc \u0628\u0631\u0627\u06cc \u062d\u0644 \u06cc\u06a9 \u0645\u0634\u06a9\u0644 \u0645\u0647\u0645 \u067e\u062f\u06cc\u062f\u0627\u0631 \u0634\u062f: <em>\u0686\u06af\u0648\u0646\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646 UIS \u0647\u0646\u06af\u0627\u0645 \u062a\u063a\u06cc\u06cc\u0631 \u062f\u0627\u062f\u0647 \u0647\u0627 \u0628\u0647 \u0637\u0648\u0631 \u062e\u0648\u062f\u06a9\u0627\u0631 \u0628\u0647 \u0631\u0648\u0632 \u0634\u062f\u061f<\/em> \u0686\u0627\u0631\u0686\u0648\u0628 \u0647\u0627 \u0645\u0639\u0631\u0641\u06cc \u0634\u062f\u0646\u062f <strong>\u0646\u0634\u0627\u0646<\/strong>-\u0645\u062a\u063a\u06cc\u0631\u0647\u0627\u06cc\u06cc \u06a9\u0647 \u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u0647\u0627 \u0631\u0627 \u0631\u062f\u06cc\u0627\u0628\u06cc \u0645\u06cc \u06a9\u0646\u0646\u062f \u0648 \u0628\u0647 \u0645\u0635\u0631\u0641 \u06a9\u0646\u0646\u062f\u06af\u0627\u0646 \u062f\u0631 \u0645\u0648\u0631\u062f \u062c\u0647\u0634 \u0627\u0637\u0644\u0627\u0639 \u0645\u06cc \u062f\u0647\u0646\u062f.  <\/p>\n<p>\u0646\u062a\u06cc\u062c\u0647\u061f \u06a9\u062f \u067e\u0627\u06a9 \u06a9\u0646\u0646\u062f\u0647 \u060c \u0645\u062f\u06cc\u0631\u06cc\u062a \u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u0636\u0645\u0646\u06cc \u060c \u0648 \u067e\u06cc\u0634\u0627\u0646\u06cc \u06a9\u0647 \u0628\u0647 \u0635\u0648\u0631\u062a \u062f\u0633\u062a\u06cc \u062a\u0645\u0627\u0633 \u06af\u0631\u0641\u062a\u0646\u062f <code>render()<\/code>\u0628\u0634\u0631  <\/p>\n<p>\u067e\u0627\u06cc\u062a\u0648\u0646 \u0627\u0645\u0627 \u0639\u0642\u0628 \u0645\u0627\u0646\u062f\u0647 \u0627\u0633\u062a. \u062f\u0631 \u062d\u0627\u0644\u06cc \u06a9\u0647 \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 \u0647\u0627\u06cc\u06cc \u0645\u0627\u0646\u0646\u062f RXPY \u067e\u0633\u0648\u0646\u062f\u0647\u0627\u06cc \u0648\u0627\u06a9\u0646\u0634\u06cc \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc \u062f\u0627\u062f\u0646\u062f \u060c \u0622\u0646\u0647\u0627 \u062e\u0648\u0627\u0633\u062a\u0627\u0631 \u0645\u062c\u0645\u0648\u0639\u0647 \u0647\u0627\u06cc \u067e\u06cc\u0686\u06cc\u062f\u0647 \u0627\u06cc \u0628\u0648\u062f\u0646\u062f. <strong>\u062c\u062a<\/strong> \u0627\u06cc\u0646 \u0634\u06a9\u0627\u0641 \u0631\u0627 \u0628\u0627 \u06cc\u06a9 API \u0645\u06cc\u0646\u06cc\u0645\u0627\u0644\u06cc\u0633\u062a\u06cc \u060c Pythonic \u0645\u062a\u0646\u0627\u0633\u0628 \u0628\u0627 \u0632\u0645\u06cc\u0646\u0647 \u0647\u0627\u06cc \u0648\u0627\u0642\u0639\u06cc \u062f\u0631 \u062f\u0646\u06cc\u0627\u06cc \u0648\u0627\u0642\u0639\u06cc \u0648 \u0645\u0648\u0627\u0631\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 IoT \u067e\u0631 \u0645\u06cc \u06a9\u0646\u062f.  <\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D9%85%D9%81%D8%A7%D9%87%DB%8C%D9%85_%D8%A7%D8%B5%D9%84%DB%8C_%D8%B3%DB%8C%DA%AF%D9%86%D8%A7%D9%84_%D9%87%D8%A7_%D8%8C_%D9%85%D8%AD%D8%A7%D8%B3%D8%A8%D9%87_%D8%B4%D8%AF%D9%87_%D9%88_%D8%A7%D8%AB%D8%B1%D8%A7%D8%AA\"><\/span>\n<p>  <strong>\u0645\u0641\u0627\u0647\u06cc\u0645 \u0627\u0635\u0644\u06cc: \u0633\u06cc\u06af\u0646\u0627\u0644 \u0647\u0627 \u060c \u0645\u062d\u0627\u0633\u0628\u0647 \u0634\u062f\u0647 \u0648 \u0627\u062b\u0631\u0627\u062a<\/strong><br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0642\u062f\u0631\u062a Reaktiv \u062f\u0631 \u0633\u0647 \u0628\u062f\u0648\u06cc \u0646\u0647\u0641\u062a\u0647 \u0627\u0633\u062a:  <\/p>\n<ol>\n<li>\n<strong>\u0646\u0634\u0627\u0646\u0647<\/strong>: \u06cc\u06a9 \u0638\u0631\u0641 \u0628\u0627 \u0627\u0631\u0632\u0634 \u0642\u0627\u0628\u0644 \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u0647 \u0628\u0647 \u0648\u0627\u0628\u0633\u062a\u06af\u0627\u0646 \u0628\u0647 \u062a\u063a\u06cc\u06cc\u0631 \u0627\u0637\u0644\u0627\u0639 \u0645\u06cc \u062f\u0647\u062f.\n<\/li>\n<\/ol>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight python\"><code>   <span class=\"kn\">from<\/span> <span class=\"n\">reaktiv<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">signal<\/span>  \n   <span class=\"n\">temperature<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">signal<\/span><span class=\"p\">(<\/span><span class=\"mf\">25.0<\/span><span class=\"p\">)<\/span>  <span class=\"c1\"># Initial value  \n<\/span>   <span class=\"n\">temperature<\/span><span class=\"p\">.<\/span><span class=\"nf\">set<\/span><span class=\"p\">(<\/span><span class=\"mf\">30.0<\/span><span class=\"p\">)<\/span>       <span class=\"c1\"># Update value  \n<\/span><\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<ol>\n<li>\n<strong>\u0645\u062d\u0627\u0633\u0628\u0647 \u0634\u062f\u0647<\/strong>: \u0645\u0642\u0627\u062f\u06cc\u0631 \u0645\u0634\u062a\u0642 \u0634\u062f\u0647 \u06a9\u0647 \u0647\u0646\u06af\u0627\u0645 \u062a\u063a\u06cc\u06cc\u0631 \u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u060c \u062e\u0648\u062f\u06a9\u0627\u0631 \u0628\u0647 \u0631\u0648\u0632 \u0645\u06cc \u0634\u0648\u0646\u062f.\n<\/li>\n<\/ol>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight python\"><code>   <span class=\"kn\">from<\/span> <span class=\"n\">reaktiv<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">computed<\/span>  \n   <span class=\"n\">feels_like<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">computed<\/span><span class=\"p\">(<\/span><span class=\"k\">lambda<\/span><span class=\"p\">:<\/span> <span class=\"nf\">temperature<\/span><span class=\"p\">()<\/span> <span class=\"o\">*<\/span> <span class=\"nf\">humidity<\/span><span class=\"p\">())<\/span>  \n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<ol>\n<li>\n<strong>\u0627\u062b\u0631<\/strong>: \u0639\u0648\u0627\u0631\u0636 \u062c\u0627\u0646\u0628\u06cc \u0646\u0627\u0634\u06cc \u0627\u0632 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0633\u06cc\u06af\u0646\u0627\u0644\/\u0645\u062d\u0627\u0633\u0628\u0647 \u0634\u062f\u0647.\n<\/li>\n<\/ol>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight python\"><code>   <span class=\"kn\">from<\/span> <span class=\"n\">reaktiv<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">effect<\/span>  \n   <span class=\"k\">async<\/span> <span class=\"k\">def<\/span> <span class=\"nf\">log_climate<\/span><span class=\"p\">():<\/span>  \n       <span class=\"nf\">print<\/span><span class=\"p\">(<\/span><span class=\"sa\">f<\/span><span class=\"sh\">\"<\/span><span class=\"s\">Feels like: <\/span><span class=\"si\">{<\/span><span class=\"nf\">feels_like<\/span><span class=\"p\">()<\/span><span class=\"si\">}<\/span><span class=\"s\">\u00b0C<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>  \n   <span class=\"n\">log_effect<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">effect<\/span><span class=\"p\">(<\/span><span class=\"n\">log_climate<\/span><span class=\"p\">)<\/span>  <span class=\"c1\"># Runs on `temperature` or `humidity` changes  \n<\/span><\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0627\u06cc\u0646 \u0633\u0647 \u06af\u0627\u0646\u0647 \u0645\u062f\u06cc\u0631\u06cc\u062a \u062f\u0648\u0644\u062a \u0627\u0639\u0644\u0627\u0645\u06cc\u0647 \u0631\u0627 \u0642\u0627\u062f\u0631 \u0645\u06cc \u0633\u0627\u0632\u062f-<em>\u0631\u0648\u0627\u0628\u0637 \u0631\u0627 \u06cc\u06a9 \u0628\u0627\u0631 \u062a\u0639\u0631\u06cc\u0641 \u06a9\u0646\u06cc\u062f \u060c \u0627\u062c\u0627\u0632\u0647 \u062f\u0647\u06cc\u062f \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 \u0628\u0647 \u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0647\u0627 \u0631\u0627 \u0627\u0646\u062c\u0627\u0645 \u062f\u0647\u062f<\/em>\u0628\u0634\u0631  <\/p>\n<h2><span class=\"ez-toc-section\" id=\"%DA%86%D8%B1%D8%A7_Reaktiv_%D8%AF%D8%B1_%D8%B3%D9%86%D8%A7%D8%B1%DB%8C%D9%88%D9%87%D8%A7%DB%8C_%D8%AF%D9%86%DB%8C%D8%A7%DB%8C_%D9%88%D8%A7%D9%82%D8%B9%DB%8C_%D9%85%DB%8C_%D8%AF%D8%B1%D8%AE%D8%B4%D8%AF\"><\/span>\n<p>  \u0686\u0631\u0627 Reaktiv \u062f\u0631 \u0633\u0646\u0627\u0631\u06cc\u0648\u0647\u0627\u06cc \u062f\u0646\u06cc\u0627\u06cc \u0648\u0627\u0642\u0639\u06cc \u0645\u06cc \u062f\u0631\u062e\u0634\u062f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<h3><span class=\"ez-toc-section\" id=\"1_WebSockets_Fastapi_%D8%A8%D9%87_%D8%B1%D9%88%D8%B2%D8%B1%D8%B3%D8%A7%D9%86%DB%8C_%D9%87%D8%A7%DB%8C_%D8%B2%D9%85%D8%A7%D9%86_%D9%88%D8%A7%D9%82%D8%B9%DB%8C_%D8%A8%D8%AF%D9%88%D9%86_%D8%AF%DB%8C%DA%AF_%D8%A8%D8%AE%D8%A7%D8%B1\"><\/span>\n<p>  1. WebSockets Fastapi: \u0628\u0647 \u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0647\u0627\u06cc \u0632\u0645\u0627\u0646 \u0648\u0627\u0642\u0639\u06cc \u0628\u062f\u0648\u0646 \u062f\u06cc\u06af \u0628\u062e\u0627\u0631<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0642\u06cc\u0645\u062a \u0633\u0647\u0627\u0645 \u0631\u062f\u06cc\u0627\u0628\u06cc \u062f\u0627\u0634\u0628\u0648\u0631\u062f \u0632\u0646\u062f\u0647 \u0631\u0627 \u062f\u0631 \u0646\u0638\u0631 \u0628\u06af\u06cc\u0631\u06cc\u062f. \u0628\u0627 Reaktiv:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight python\"><code><span class=\"kn\">from<\/span> <span class=\"n\">fastapi<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">WebSocket<\/span>  \n<span class=\"kn\">from<\/span> <span class=\"n\">reaktiv<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">signal<\/span><span class=\"p\">,<\/span> <span class=\"n\">effect<\/span>  \n\n<span class=\"n\">stocks<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">signal<\/span><span class=\"p\">({<\/span><span class=\"sh\">\"<\/span><span class=\"s\">AAPL<\/span><span class=\"sh\">\"<\/span><span class=\"p\">:<\/span> <span class=\"mf\">150.0<\/span><span class=\"p\">,<\/span> <span class=\"sh\">\"<\/span><span class=\"s\">GOOGL<\/span><span class=\"sh\">\"<\/span><span class=\"p\">:<\/span> <span class=\"mf\">2700.0<\/span><span class=\"p\">})<\/span>  \n\n<span class=\"nd\">@app.websocket<\/span><span class=\"p\">(<\/span><span class=\"sh\">\"<\/span><span class=\"s\">\/stocks<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>  \n<span class=\"k\">async<\/span> <span class=\"k\">def<\/span> <span class=\"nf\">stock_feed<\/span><span class=\"p\">(<\/span><span class=\"n\">websocket<\/span><span class=\"p\">:<\/span> <span class=\"n\">WebSocket<\/span><span class=\"p\">):<\/span>  \n    <span class=\"k\">await<\/span> <span class=\"n\">websocket<\/span><span class=\"p\">.<\/span><span class=\"nf\">accept<\/span><span class=\"p\">()<\/span>  \n\n    <span class=\"k\">async<\/span> <span class=\"k\">def<\/span> <span class=\"nf\">send_updates<\/span><span class=\"p\">():<\/span>  \n        <span class=\"k\">await<\/span> <span class=\"n\">websocket<\/span><span class=\"p\">.<\/span><span class=\"nf\">send_json<\/span><span class=\"p\">(<\/span><span class=\"nf\">stocks<\/span><span class=\"p\">())<\/span>  \n\n    <span class=\"c1\"># Assign effect to variable to avoid garbage collection  \n<\/span>    <span class=\"n\">update_effect<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">effect<\/span><span class=\"p\">(<\/span><span class=\"n\">send_updates<\/span><span class=\"p\">)<\/span>  \n\n    <span class=\"k\">try<\/span><span class=\"p\">:<\/span>  \n        <span class=\"k\">while<\/span> <span class=\"bp\">True<\/span><span class=\"p\">:<\/span>  \n            <span class=\"k\">await<\/span> <span class=\"n\">asyncio<\/span><span class=\"p\">.<\/span><span class=\"nf\">sleep<\/span><span class=\"p\">(<\/span><span class=\"mi\">1<\/span><span class=\"p\">)<\/span>  <span class=\"c1\"># Simulate background updates  \n<\/span>    <span class=\"k\">finally<\/span><span class=\"p\">:<\/span>  \n        <span class=\"n\">update_effect<\/span><span class=\"p\">.<\/span><span class=\"nf\">dispose<\/span><span class=\"p\">()<\/span>  <span class=\"c1\"># Cleanup  \n<\/span><\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u06a9\u06cc <code>stocks.set(new_data)<\/code> \u0622\u062a\u0634 \u0633\u0648\u0632\u06cc \u060c \u06a9\u0644\u06cc\u0647 \u0645\u0634\u062a\u0631\u06cc\u0627\u0646 \u0645\u062a\u0635\u0644 \u0628\u0647 \u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc \u06a9\u0646\u0646\u062f. \u0628\u062f\u0648\u0646 \u06a9\u062a\u0627\u0628\u0686\u0647 \u0631\u0627\u0647\u0646\u0645\u0627 <code>broadcast()<\/code> \u062a\u0645\u0627\u0633 \u0647\u0627 \u0628\u062f\u0648\u0646 \u0646\u0638\u0631\u0633\u0646\u062c\u06cc  <\/p>\n<h3><span class=\"ez-toc-section\" id=\"2_%D8%B3%DB%8C%D8%B3%D8%AA%D9%85_%D9%87%D8%A7%DB%8C_IoT_%D9%88%D8%A7%DA%A9%D9%86%D8%B4_%D8%A8%D9%87_%D8%AF%D8%A7%D8%AF%D9%87_%D9%87%D8%A7%DB%8C_%D8%B3%D9%86%D8%B3%D9%88%D8%B1_%D9%88%D8%A7%DA%A9%D9%86%D8%B4_%D9%86%D8%B4%D8%A7%D9%86_%D9%85%DB%8C_%D8%AF%D9%87%D8%AF\"><\/span>\n<p>  2. \u0633\u06cc\u0633\u062a\u0645 \u0647\u0627\u06cc IoT: \u0648\u0627\u06a9\u0646\u0634 \u0628\u0647 \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u0633\u0646\u0633\u0648\u0631 \u0648\u0627\u06a9\u0646\u0634 \u0646\u0634\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0628\u0631\u0627\u06cc \u06cc\u06a9 \u062e\u0637 \u0644\u0648\u0644\u0647 IoT \u0646\u0638\u0627\u0631\u062a \u0628\u0631 \u06a9\u06cc\u0641\u06cc\u062a \u0647\u0648\u0627:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight python\"><code><span class=\"n\">pm25<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">signal<\/span><span class=\"p\">(<\/span><span class=\"mf\">35.0<\/span><span class=\"p\">)<\/span>  \n<span class=\"n\">alert_threshold<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">signal<\/span><span class=\"p\">(<\/span><span class=\"mf\">50.0<\/span><span class=\"p\">)<\/span>  \n\n<span class=\"c1\"># Derived air quality index  \n<\/span><span class=\"n\">aqi<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">computed<\/span><span class=\"p\">(<\/span><span class=\"k\">lambda<\/span><span class=\"p\">:<\/span> <span class=\"nf\">pm25<\/span><span class=\"p\">()<\/span> <span class=\"o\">\/<\/span> <span class=\"nf\">alert_threshold<\/span><span class=\"p\">()<\/span> <span class=\"o\">*<\/span> <span class=\"mi\">100<\/span><span class=\"p\">)<\/span>  \n\n<span class=\"k\">async<\/span> <span class=\"k\">def<\/span> <span class=\"nf\">trigger_alerts<\/span><span class=\"p\">():<\/span>  \n    <span class=\"k\">if<\/span> <span class=\"nf\">aqi<\/span><span class=\"p\">()<\/span> <span class=\"o\">&gt;<\/span> <span class=\"mi\">100<\/span><span class=\"p\">:<\/span>  \n        <span class=\"k\">await<\/span> <span class=\"nf\">notify_admins<\/span><span class=\"p\">()<\/span>  \n        <span class=\"k\">await<\/span> <span class=\"nf\">activate_purifiers<\/span><span class=\"p\">()<\/span>  \n\n<span class=\"c1\"># Assign effect to persist it  \n<\/span><span class=\"n\">alert_effect<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">effect<\/span><span class=\"p\">(<\/span><span class=\"n\">trigger_alerts<\/span><span class=\"p\">)<\/span>  \n\n<span class=\"c1\"># Simulate sensor input  \n<\/span><span class=\"n\">pm25<\/span><span class=\"p\">.<\/span><span class=\"nf\">set<\/span><span class=\"p\">(<\/span><span class=\"mf\">55.0<\/span><span class=\"p\">)<\/span>  <span class=\"c1\"># AQI = 110 \u2192 Alerts fire  \n<\/span><\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h3><span class=\"ez-toc-section\" id=\"3_%D9%81%D8%B1%D8%A2%DB%8C%D9%86%D8%AF%D9%87%D8%A7%DB%8C_%D8%B7%D9%88%D9%84%D8%A7%D9%86%DB%8C_%D8%A8%D8%A7_%D8%AA%D8%B9%D8%A7%D9%85%D9%84_%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1\"><\/span>\n<p>  3. \u0641\u0631\u0622\u06cc\u0646\u062f\u0647\u0627\u06cc \u0637\u0648\u0644\u0627\u0646\u06cc \u0628\u0627 \u062a\u0639\u0627\u0645\u0644 \u06a9\u0627\u0631\u0628\u0631<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u06cc\u06a9 \u0627\u0628\u0632\u0627\u0631 CLI \u0631\u0627 \u062a\u0635\u0648\u0631 \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u0647\u0646\u06af\u0627\u0645 \u067e\u0630\u06cc\u0631\u0634 \u062f\u0633\u062a\u0648\u0631\u0627\u062a \u06a9\u0627\u0631\u0628\u0631 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0631\u0627 \u067e\u0631\u062f\u0627\u0632\u0634 \u0645\u06cc \u06a9\u0646\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight python\"><code><span class=\"n\">upload_progress<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">signal<\/span><span class=\"p\">(<\/span><span class=\"mi\">0<\/span><span class=\"p\">)<\/span>  \n<span class=\"n\">user_command<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">signal<\/span><span class=\"p\">(<\/span><span class=\"sh\">\"<\/span><span class=\"s\">pause<\/span><span class=\"sh\">\"<\/span><span class=\"p\">)<\/span>  \n\n<span class=\"k\">async<\/span> <span class=\"k\">def<\/span> <span class=\"nf\">handle_upload<\/span><span class=\"p\">():<\/span>  \n    <span class=\"k\">while<\/span> <span class=\"nf\">upload_progress<\/span><span class=\"p\">()<\/span> <span class=\"o\">&lt;<\/span> <span class=\"mi\">100<\/span><span class=\"p\">:<\/span>  \n        <span class=\"k\">if<\/span> <span class=\"nf\">user_command<\/span><span class=\"p\">()<\/span> <span class=\"o\">==<\/span> <span class=\"sh\">\"<\/span><span class=\"s\">pause<\/span><span class=\"sh\">\"<\/span><span class=\"p\">:<\/span>  \n            <span class=\"k\">await<\/span> <span class=\"n\">asyncio<\/span><span class=\"p\">.<\/span><span class=\"nf\">sleep<\/span><span class=\"p\">(<\/span><span class=\"mi\">1<\/span><span class=\"p\">)<\/span>  <span class=\"c1\"># Wait for resume  \n<\/span>            <span class=\"k\">continue<\/span>  \n        <span class=\"c1\"># Process chunk  \n<\/span>        <span class=\"n\">upload_progress<\/span><span class=\"p\">.<\/span><span class=\"nf\">update<\/span><span class=\"p\">(<\/span><span class=\"k\">lambda<\/span> <span class=\"n\">x<\/span><span class=\"p\">:<\/span> <span class=\"n\">x<\/span> <span class=\"o\">+<\/span> <span class=\"mi\">10<\/span><span class=\"p\">)<\/span>  \n\n<span class=\"n\">upload_effect<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">effect<\/span><span class=\"p\">(<\/span><span class=\"n\">handle_upload<\/span><span class=\"p\">)<\/span>  \n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0648\u0631\u0648\u062f\u06cc \u0647\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631 (\u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0645\u062b\u0627\u0644 \u060c <code>user_command.set(\"resume\")<\/code>) \u0628\u062f\u0648\u0646 \u0634\u0631\u0648\u0639 \u0645\u062c\u062f\u062f \u0631\u0648\u0646\u062f \u060c \u0631\u0641\u062a\u0627\u0631 \u0631\u0627 \u0628\u0647 \u0635\u0648\u0631\u062a \u067e\u0648\u06cc\u0627 \u062a\u063a\u06cc\u06cc\u0631 \u062f\u0647\u06cc\u062f.  <\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D8%B2%DB%8C%D8%B1_%DA%A9%D8%A7%D9%BE%D9%88%D8%AA_%DA%86%DA%AF%D9%88%D9%86%D9%87_ReakTiv_%D9%88%D8%A7%D8%A8%D8%B3%D8%AA%DA%AF%DB%8C_%D9%87%D8%A7_%D8%B1%D8%A7_%D8%B1%D8%AF%DB%8C%D8%A7%D8%A8%DB%8C_%D9%85%DB%8C_%DA%A9%D9%86%D8%AF\"><\/span>\n<p>  \u0632\u06cc\u0631 \u06a9\u0627\u067e\u0648\u062a: \u0686\u06af\u0648\u0646\u0647 ReakTiv \u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u0647\u0627 \u0631\u0627 \u0631\u062f\u06cc\u0627\u0628\u06cc \u0645\u06cc \u06a9\u0646\u062f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0647\u0646\u06af\u0627\u0645\u06cc \u06a9\u0647 \u0628\u0647 \u06cc\u06a9 \u0633\u06cc\u06af\u0646\u0627\u0644 \u062f\u0631 \u062f\u0627\u062e\u0644 \u062f\u0633\u062a\u0631\u0633\u06cc \u062f\u0627\u0631\u06cc\u062f <code>computed<\/code> \u06cc\u0627 <code>effect<\/code>\u060c ReakTiv \u0628\u0647 \u0637\u0648\u0631 \u062e\u0648\u062f\u06a9\u0627\u0631 \u0622\u0646 \u0631\u0627 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u06cc\u06a9 \u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u062b\u0628\u062a \u0645\u06cc \u06a9\u0646\u062f. \u0627\u06cc\u0646 \u0646\u0645\u0648\u062f\u0627\u0631 \u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u062a\u0636\u0645\u06cc\u0646 \u0645\u06cc \u06a9\u0646\u062f:  <\/p>\n<ul>\n<li>\n<strong>\u06a9\u0627\u0631\u0622\u06cc\u06cc:<\/strong> \u0641\u0642\u0637 \u0645\u062d\u0627\u0633\u0628\u0627\u062a \u062a\u062d\u062a \u062a\u0623\u062b\u06cc\u0631 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0642\u0631\u0627\u0631 \u06af\u0631\u0641\u062a\u0646\u062f.\n<\/li>\n<li>\n<strong>\u0639\u0627\u0631\u06cc \u0627\u0632 Glitch:<\/strong> \u0628\u0647 \u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0647\u0627\u06cc \u062c\u0645\u0639 \u0634\u062f\u0647 \u0627\u0632 \u062d\u0627\u0644\u062a \u0647\u0627\u06cc \u0645\u062a\u0648\u0633\u0637 \u200b\u200b\u0645\u062a\u0646\u0627\u0642\u0636 \u062c\u0644\u0648\u06af\u06cc\u0631\u06cc \u0645\u06cc \u06a9\u0646\u0646\u062f.\n<\/li>\n<\/ul>\n<p>\u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0645\u062b\u0627\u0644:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight python\"><code><span class=\"n\">a<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">signal<\/span><span class=\"p\">(<\/span><span class=\"mi\">1<\/span><span class=\"p\">)<\/span>  \n<span class=\"n\">b<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">signal<\/span><span class=\"p\">(<\/span><span class=\"mi\">2<\/span><span class=\"p\">)<\/span>  \n<span class=\"n\">c<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">computed<\/span><span class=\"p\">(<\/span><span class=\"k\">lambda<\/span><span class=\"p\">:<\/span> <span class=\"nf\">a<\/span><span class=\"p\">()<\/span> <span class=\"o\">+<\/span> <span class=\"nf\">b<\/span><span class=\"p\">())<\/span>  <span class=\"c1\"># Depends on `a` and `b`  \n<\/span><span class=\"n\">eff<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">effect<\/span><span class=\"p\">(<\/span><span class=\"k\">lambda<\/span><span class=\"p\">:<\/span> <span class=\"nf\">print<\/span><span class=\"p\">(<\/span><span class=\"nf\">c<\/span><span class=\"p\">()))<\/span> <span class=\"c1\"># Depends on `c`  \n<\/span>\n<span class=\"n\">a<\/span><span class=\"p\">.<\/span><span class=\"nf\">set<\/span><span class=\"p\">(<\/span><span class=\"mi\">3<\/span><span class=\"p\">)<\/span>  <span class=\"c1\"># Recomputes `c`, then triggers effect  \n<\/span><\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h2><span class=\"ez-toc-section\" id=\"%D9%88%DB%8C%DA%98%DA%AF%DB%8C_%D9%87%D8%A7%DB%8C_%D9%BE%DB%8C%D8%B4%D8%B1%D9%81%D8%AA%D9%87_%D8%A8%D8%B1%D8%A7%DB%8C_%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87_%D8%A7%D8%B2_%D8%AA%D9%88%D9%84%DB%8C%D8%AF\"><\/span>\n<p>  <strong>\u0648\u06cc\u0698\u06af\u06cc \u0647\u0627\u06cc \u067e\u06cc\u0634\u0631\u0641\u062a\u0647 \u0628\u0631\u0627\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u062a\u0648\u0644\u06cc\u062f<\/strong><br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<ol>\n<li>\n<strong>\u0628\u0631\u0631\u0633\u06cc \u0628\u0631\u0627\u0628\u0631\u06cc \u0633\u0641\u0627\u0631\u0634\u06cc:<\/strong><br \/>\n\u0627\u0632 \u0628\u0647 \u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0647\u0627\u06cc \u063a\u06cc\u0631 \u0636\u0631\u0648\u0631\u06cc \u0628\u0627 \u0645\u0642\u0627\u06cc\u0633\u0647 \u06a9\u0646\u0646\u062f\u0647 \u0647\u0627\u06cc \u0633\u0641\u0627\u0631\u0634\u06cc \u062e\u0648\u062f\u062f\u0627\u0631\u06cc \u06a9\u0646\u06cc\u062f.\n<\/li>\n<\/ol>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight python\"><code>   <span class=\"c1\"># Only trigger if the difference exceeds 5  \n<\/span>   <span class=\"n\">temp<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">signal<\/span><span class=\"p\">(<\/span><span class=\"mf\">25.0<\/span><span class=\"p\">,<\/span> <span class=\"n\">equal<\/span><span class=\"o\">=<\/span><span class=\"k\">lambda<\/span> <span class=\"n\">old<\/span><span class=\"p\">,<\/span> <span class=\"n\">new<\/span><span class=\"p\">:<\/span> <span class=\"nf\">abs<\/span><span class=\"p\">(<\/span><span class=\"n\">old<\/span> <span class=\"o\">-<\/span> <span class=\"n\">new<\/span><span class=\"p\">)<\/span> <span class=\"o\">&lt;<\/span> <span class=\"mi\">5<\/span><span class=\"p\">)<\/span>  \n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<ol>\n<li>\n<strong>\u062e\u0648\u0627\u0646\u062f\u0647 \u0634\u062f\u0647 \u0646\u0634\u062f\u0647:<\/strong><br \/>\n\u0628\u062f\u0648\u0646 \u0639\u0636\u0648\u06cc\u062a \u062f\u0631 \u0622\u0646 \u0628\u0647 \u06cc\u06a9 \u0633\u06cc\u06af\u0646\u0627\u0644 \u062f\u0633\u062a\u0631\u0633\u06cc \u067e\u06cc\u062f\u0627 \u06a9\u0646\u06cc\u062f.\n<\/li>\n<\/ol>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight python\"><code>   <span class=\"kn\">from<\/span> <span class=\"n\">reaktiv<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">untracked<\/span>  \n   <span class=\"n\">eff<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">effect<\/span><span class=\"p\">(<\/span><span class=\"k\">lambda<\/span><span class=\"p\">:<\/span> <span class=\"nf\">print<\/span><span class=\"p\">(<\/span><span class=\"nf\">untracked<\/span><span class=\"p\">(<\/span><span class=\"n\">temp<\/span><span class=\"p\">)))<\/span>  <span class=\"c1\"># No dependency on `temp`  \n<\/span><\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<ol>\n<li>\n<strong>\u067e\u0627\u06a9\u0633\u0627\u0632\u06cc \u0627\u062b\u0631:<\/strong><br \/>\n\u0645\u0646\u0627\u0628\u0639 \u0631\u0627 \u062f\u0631 \u0647\u0646\u06af\u0627\u0645 \u0628\u0627\u0632\u06af\u0631\u062f\u0627\u0646\u062f\u0646 \u06cc\u0627 \u062f\u0641\u0639 \u0645\u062c\u062f\u062f \u060c \u0631\u0647\u0627 \u06a9\u0646\u06cc\u062f.\n<\/li>\n<\/ol>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight python\"><code>   <span class=\"k\">async<\/span> <span class=\"k\">def<\/span> <span class=\"nf\">fetch_data<\/span><span class=\"p\">(<\/span><span class=\"n\">on_cleanup<\/span><span class=\"p\">):<\/span>  \n       <span class=\"n\">timer<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">start_interval<\/span><span class=\"p\">(<\/span><span class=\"n\">update_data<\/span><span class=\"p\">,<\/span> <span class=\"n\">seconds<\/span><span class=\"o\">=<\/span><span class=\"mi\">10<\/span><span class=\"p\">)<\/span>  \n       <span class=\"nf\">on_cleanup<\/span><span class=\"p\">(<\/span><span class=\"n\">timer<\/span><span class=\"p\">.<\/span><span class=\"n\">cancel<\/span><span class=\"p\">)<\/span>  <span class=\"c1\"># Cancel on disposal  \n<\/span><\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h2><span class=\"ez-toc-section\" id=\"%D9%85%D9%84%D8%A7%D8%AD%D8%B8%D8%A7%D8%AA_%D8%B9%D9%85%D9%84%DA%A9%D8%B1%D8%AF\"><\/span>\n<p>  \u0645\u0644\u0627\u062d\u0638\u0627\u062a \u0639\u0645\u0644\u06a9\u0631\u062f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Reaktiv \u062f\u0631 \u0628\u0627\u0631\u0647\u0627\u06cc \u06a9\u0627\u0631\u06cc \u0633\u0628\u06a9 \u062a\u0627 \u0645\u062a\u0648\u0633\u0637 \u200b\u200b(\u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0645\u062b\u0627\u0644 \u060c \u0635\u062f\u0647\u0627 \u0645\u0634\u062a\u0631\u06cc \u060c \u062f\u0633\u062a\u06af\u0627\u0647 \u0647\u0627\u06cc IoT Edge) \u0628\u0631\u062a\u0631\u06cc \u062f\u0627\u0631\u062f. \u0628\u0627 \u0627\u06cc\u0646 \u062d\u0627\u0644:  <\/p>\n<ul>\n<li>\n<strong>\u0645\u0642\u06cc\u0627\u0633 \u067e\u0630\u06cc\u0631\u06cc:<\/strong> \u0628\u0631\u0627\u06cc \u0627\u062a\u0635\u0627\u0644\u0627\u062a 10K+ WebSocket \u060c \u062c\u0641\u062a ReakTiv \u0628\u0627 \u06a9\u0627\u0631\u06af\u0632\u0627\u0631\u0627\u0646 \u0627\u062e\u062a\u0635\u0627\u0635\u06cc \u0645\u0627\u0646\u0646\u062f Redis Pub\/Sub.\n<\/li>\n<li>\n<strong>\u0645\u062c\u0645\u0648\u0639\u0647 \u0632\u0628\u0627\u0644\u0647 \u0647\u0627:<\/strong> \u0627\u062b\u0631\u0627\u062a <em>\u0628\u0627\u06cc\u062f<\/em> \u0628\u0647 \u0645\u062a\u063a\u06cc\u0631\u0647\u0627 \u0627\u062e\u062a\u0635\u0627\u0635 \u062f\u0627\u062f\u0647 \u0645\u06cc \u0634\u0648\u062f. \u062f\u0631 \u063a\u06cc\u0631 \u0627\u06cc\u0646 \u0635\u0648\u0631\u062a \u060c \u0622\u0646\u0647\u0627 \u0632\u0628\u0627\u0644\u0647 \u0628\u0647 \u0635\u0648\u0631\u062a \u0632\u0648\u062f\u0631\u0633 \u062c\u0645\u0639 \u0622\u0648\u0631\u06cc \u0645\u06cc \u0634\u0648\u0646\u062f.\n<\/li>\n<li>\n<strong>\u0627\u06cc\u0645\u0646\u06cc async:<\/strong> \u0637\u0631\u0627\u062d\u06cc \u0634\u062f\u0647 \u0628\u0631\u0627\u06cc \u06a9\u062f Unsafe \u060c \u062a\u06a9 \u0631\u0634\u062a\u0647 \u0627\u06cc Async. \u0628\u0627 \u0627\u062d\u062a\u06cc\u0627\u0637 \u062f\u0631 \u0632\u0645\u06cc\u0646\u0647 \u0647\u0627\u06cc \u0645\u0648\u0636\u0648\u0639\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f.\n<\/li>\n<\/ul>\n<h2><span class=\"ez-toc-section\" id=\"%DA%86%D9%87_%D9%85%D9%88%D9%82%D8%B9_%D8%A7%D8%B2_ReakTiv_%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87_%DA%A9%D9%86%DB%8C%D8%AF_%D9%88_%DA%86%D9%87_%D9%85%D9%88%D9%82%D8%B9_%D9%86%DB%8C%D8%B3%D8%AA\"><\/span>\n<p>  \u0686\u0647 \u0645\u0648\u0642\u0639 \u0627\u0632 ReakTiv \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f (\u0648 \u0686\u0647 \u0645\u0648\u0642\u0639 \u0646\u06cc\u0633\u062a)<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><strong>\u0627\u06cc\u062f\u0647 \u0622\u0644 \u0628\u0631\u0627\u06cc:<\/strong>  <\/p>\n<ul>\n<li>\u062f\u0627\u0634\u0628\u0648\u0631\u062f \u062f\u0631 \u0632\u0645\u0627\u0646 \u0648\u0627\u0642\u0639\u06cc (FastAPI\/WebSocket).\n<\/li>\n<li>\u062e\u0637\u0648\u0637 \u0644\u0648\u0644\u0647 \u0645\u062d\u0627\u0633\u0628\u0627\u062a IoT\/Edge.\n<\/li>\n<li>\u0627\u0628\u0632\u0627\u0631\u0647\u0627\u06cc CLI \u0628\u0627 \u062a\u0639\u0627\u0645\u0644 \u06a9\u0627\u0631\u0628\u0631 \u067e\u0648\u06cc\u0627.\n<\/li>\n<\/ul>\n<p><strong>\u0627\u06cc\u062f\u0647 \u0622\u0644 \u0628\u0631\u0627\u06cc:<\/strong>  <\/p>\n<ul>\n<li>\u0633\u06cc\u0633\u062a\u0645 \u0647\u0627\u06cc \u0645\u0639\u0627\u0645\u0644\u0627\u062a\u06cc \u0628\u0627 \u0641\u0631\u06a9\u0627\u0646\u0633 \u0628\u0627\u0644\u0627 (\u062a\u0623\u062e\u06cc\u0631 \u0646\u0627\u0646\u0648 \u062b\u0627\u0646\u06cc\u0647).\n<\/li>\n<li>\u0633\u06cc\u0633\u062a\u0645 \u0647\u0627\u06cc \u062a\u0648\u0632\u06cc\u0639 \u0634\u062f\u0647 \u06a9\u0647 \u0646\u06cc\u0627\u0632 \u0628\u0647 \u0627\u062c\u0645\u0627\u0639 \u062f\u0627\u0631\u0646\u062f (\u0627\u0632 \u0628\u0627\u0632\u06cc\u06af\u0631\u0627\u0646 \u06cc\u0627 CRDT \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f).\n<\/li>\n<\/ul>\n<h2><span class=\"ez-toc-section\" id=\"%D9%88%D8%A7%DA%A9%D9%86%D8%B4_%D9%BE%D8%B0%DB%8C%D8%B1%DB%8C_%D8%B1%D8%A7_%D8%AF%D8%B1_%D8%A2%D8%BA%D9%88%D8%B4_%D8%A8%DA%AF%DB%8C%D8%B1%DB%8C%D8%AF_%D8%8C_%D8%A8%D8%A7%D8%B1_%D8%B4%D9%86%D8%A7%D8%AE%D8%AA%DB%8C_%D8%B1%D8%A7_%DA%A9%D8%A7%D9%87%D8%B4_%D8%AF%D9%87%DB%8C%D8%AF\"><\/span>\n<p>  \u0648\u0627\u06a9\u0646\u0634 \u067e\u0630\u06cc\u0631\u06cc \u0631\u0627 \u062f\u0631 \u0622\u063a\u0648\u0634 \u0628\u06af\u06cc\u0631\u06cc\u062f \u060c \u0628\u0627\u0631 \u0634\u0646\u0627\u062e\u062a\u06cc \u0631\u0627 \u06a9\u0627\u0647\u0634 \u062f\u0647\u06cc\u062f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Reaktiv \u06cc\u06a9 \u06af\u0644\u0648\u0644\u0647 \u0646\u0642\u0631\u0647 \u0627\u06cc \u0646\u06cc\u0633\u062a \u060c \u0627\u0645\u0627 <em>\u0627\u0633\u062a \u060c<\/em> \u0627\u0628\u0632\u0627\u0631\u06cc \u0639\u0645\u0644\u06cc \u0628\u0631\u0627\u06cc \u0633\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u0645\u062f\u06cc\u0631\u06cc\u062a \u062f\u0648\u0644\u062a \u062f\u0631 \u067e\u0627\u06cc\u062a\u0648\u0646. \u0628\u0627 \u0627\u062a\u062e\u0627\u0630 \u0627\u0644\u06af\u0648\u0647\u0627\u06cc \u0627\u062b\u0628\u0627\u062a \u0634\u062f\u0647 \u062f\u0631 \u0627\u06a9\u0648\u0633\u06cc\u0633\u062a\u0645 \u0647\u0627\u06cc \u062c\u0644\u0648\u06cc \u060c \u0628\u0647 \u0634\u0645\u0627 \u0627\u0645\u06a9\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f:  <\/p>\n<ul>\n<li>\n<strong>\u0627\u0639\u0644\u0627\u0645 \u0631\u0648\u0627\u0628\u0637<\/strong>\u060c \u0628\u0647 \u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0647\u0627\u06cc \u062f\u0633\u062a\u06cc \u0646\u06cc\u0633\u062a.\n<\/li>\n<li>\n<strong>\u06cc\u06a9\u067e\u0627\u0631\u0686\u0647 \u0627\u062f\u063a\u0627\u0645<\/strong> \u0628\u0627 <code>asyncio<\/code>\u0628\u0634\u0631\n<\/li>\n<li>\n<strong>\u062a\u0645\u0631\u06a9\u0632 \u0628\u0631 \u0645\u0646\u0637\u0642 \u062a\u062c\u0627\u0631\u062a<\/strong>\u060c \u0646\u0647 \u062f\u06cc\u06af \u0628\u062e\u0627\u0631.\n<\/li>\n<\/ul>\n<p>\u0628\u0631\u0627\u06cc \u062a\u0648\u0633\u0639\u0647 \u062f\u0647\u0646\u062f\u06af\u0627\u0646 \u0627\u0631\u0634\u062f \u060c \u0627\u0631\u0632\u0634 \u062f\u0631 \u0622\u0646 \u0646\u0647\u0641\u062a\u0647 \u0627\u0633\u062a <strong>\u06a9\u0627\u0647\u0634 \u067e\u06cc\u0686\u06cc\u062f\u06af\u06cc \u0627\u062a\u0641\u0627\u0642\u06cc<\/strong>-\u0627\u06cc\u0646 \u0646\u0648\u0639 \u06a9\u0647 \u0628\u0627\u0639\u062b \u0627\u06cc\u062c\u0627\u062f \u0627\u0634\u06a9\u0627\u0644\u0627\u062a \u0645\u06cc \u0634\u0648\u062f \u0648 \u062a\u06cc\u0645 \u0647\u0627 \u0631\u0627 \u0645\u06cc \u0633\u0648\u0632\u0627\u0646\u062f.  <\/p>\n<hr\/>\n<p><strong>\u0634\u0631\u0648\u0639 \u06a9\u0646\u06cc\u062f:<\/strong><\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code>pip <span class=\"nb\">install <\/span>reaktiv  \n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0628\u0631\u0627\u06cc \u062f\u06cc\u062f\u0646 Reaktiv \u062f\u0631 \u0639\u0645\u0644 \u060c \u0645\u0633\u062a\u0646\u062f\u0627\u062a \u0648 \u0646\u0645\u0648\u0646\u0647 \u0647\u0627 \u0631\u0627 \u06a9\u0627\u0648\u0634 \u06a9\u0646\u06cc\u062f.  <\/p>\n<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u0645\u0639\u0636\u0644 \u0645\u062f\u06cc\u0631\u06cc\u062a \u062f\u0648\u0644\u062a \u062f\u0631 \u067e\u0627\u06cc\u062a\u0648\u0646 \u0627\u06cc\u0646 \u0631\u0627 \u062a\u0635\u0648\u06cc\u0631 \u06a9\u0646\u06cc\u062f: \u0634\u0645\u0627 \u062f\u0631 \u062d\u0627\u0644 \u0637\u0631\u0627\u062d\u06cc \u06cc\u06a9 WebSocket FastAPI \u0628\u0631\u0627\u06cc \u067e\u062e\u0634 \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u0633\u0646\u0633\u0648\u0631 \u062f\u0631 \u0632\u0645\u0627\u0646 \u0648\u0627\u0642\u0639\u06cc \u0647\u0633\u062a\u06cc\u062f. \u06cc\u0627 \u06cc\u06a9 \u062e\u0637 \u0644\u0648\u0644\u0647 IoT \u0631\u0627 \u06a9\u0647 \u0628\u0647 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0645\u062d\u06cc\u0637\u06cc \u0648\u0627\u06a9\u0646\u0634 \u0646\u0634\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f \u060c \u0627\u0631\u06a9\u0633\u062a\u0631 \u0645\u06cc \u06a9\u0646\u062f. \u06cc\u0627 \u0633\u0627\u062e\u062a\u0646 \u06cc\u06a9 \u0627\u0628\u0632\u0627\u0631 CLI \u0637\u0648\u0644\u0627\u0646\u06cc \u0645\u062f\u062a \u06a9\u0647 UI \u062e\u0648\u062f \u0631\u0627 \u0628\u0631 &hellip;<\/p>\n","protected":false},"author":2,"featured_media":103426,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"https:\/\/media2.dev.to\/dynamic\/image\/width=1000,height=500,fit=cover,gravity=auto,format=auto\/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmv3x5bt9dz77u4bs03t2.png","fifu_image_alt":"","footnotes":""},"categories":[339],"tags":[],"class_list":["post-103425","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dev"],"_links":{"self":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/103425","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/comments?post=103425"}],"version-history":[{"count":0,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/103425\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media\/103426"}],"wp:attachment":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media?parent=103425"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/categories?post=103425"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/tags?post=103425"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}