{"id":25883,"date":"2026-06-26T09:54:17","date_gmt":"2026-06-26T09:54:17","guid":{"rendered":"https:\/\/umang.pk\/2026\/06\/26\/typescript-%d9%85%db%8c%da%ba-%d8%a7%db%8c%da%a9-%d9%82%d8%a7%d8%a8%d9%84-%d8%a7%d8%b9%d8%aa%d9%85%d8%a7%d8%af-sse-%da%a9%d9%84%d8%a7%d8%a6%d9%86%d9%b9-%da%a9%db%8c%d8%b3%db%92-%d8%a8%d9%86%d8%a7\/"},"modified":"2026-06-26T09:54:17","modified_gmt":"2026-06-26T09:54:17","slug":"typescript-%d9%85%db%8c%da%ba-%d8%a7%db%8c%da%a9-%d9%82%d8%a7%d8%a8%d9%84-%d8%a7%d8%b9%d8%aa%d9%85%d8%a7%d8%af-sse-%da%a9%d9%84%d8%a7%d8%a6%d9%86%d9%b9-%da%a9%db%8c%d8%b3%db%92-%d8%a8%d9%86%d8%a7","status":"publish","type":"post","link":"https:\/\/umang.pk\/ur\/2026\/06\/26\/typescript-%d9%85%db%8c%da%ba-%d8%a7%db%8c%da%a9-%d9%82%d8%a7%d8%a8%d9%84-%d8%a7%d8%b9%d8%aa%d9%85%d8%a7%d8%af-sse-%da%a9%d9%84%d8%a7%d8%a6%d9%86%d9%b9-%da%a9%db%8c%d8%b3%db%92-%d8%a8%d9%86%d8%a7\/","title":{"rendered":"TypeScript \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u0642\u0627\u0628\u0644 \u0627\u0639\u062a\u0645\u0627\u062f SSE \u06a9\u0644\u0627\u0626\u0646\u0679 \u06a9\u06cc\u0633\u06d2 \u0628\u0646\u0627\u06cc\u0627 \u062c\u0627\u0626\u06d2\u06d4"},"content":{"rendered":"\n<div id=\"\">\n<p>\u0688\u06cc\u0679\u0627 \u06a9\u0648 \u0633\u0679\u0631\u06cc\u0645 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06cc \u062e\u0635\u0648\u0635\u06cc\u0627\u062a \u06a9\u06cc \u062a\u0639\u0645\u06cc\u0631 \u06a9\u0631\u062a\u06d2 \u0648\u0642\u062a\u060c \u062c\u06cc\u0633\u06d2 \u06a9\u06c1 AI \u0686\u06cc\u0679 \u06a9\u06d2 \u062c\u0648\u0627\u0628\u0627\u062a \u06cc\u0627 \u0631\u06cc\u0626\u0644 \u0679\u0627\u0626\u0645 \u0646\u0648\u0679\u06cc\u0641\u06a9\u06cc\u0634\u0646 \u0641\u06cc\u0688\u0632\u060c \u0646\u06cc\u0679 \u0648\u0631\u06a9 \u0634\u0627\u0630 \u0648 \u0646\u0627\u062f\u0631 \u06c1\u06cc \u0627\u062a\u0646\u06d2 \u06a9\u0648\u0622\u067e\u0631\u06cc\u0679\u0648 \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba \u062c\u06cc\u0633\u06d2: <code>fetch<\/code> \u0627\u0633\u06d2 \u0645\u0631\u0626\u06cc \u0628\u0646\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<p>\u06a9\u0646\u06a9\u0634\u0646 \u0645\u0646\u0642\u0637\u0639 \u06c1\u0648 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u0627\u06cc\u06a9 \u067e\u0631\u0627\u06a9\u0633\u06cc \u0628\u0641\u0631 \u0631\u0633\u067e\u0627\u0646\u0633 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0645\u0648\u0628\u0627\u0626\u0644 \u0646\u06cc\u0679 \u0648\u0631\u06a9 \u0648\u0627\u0626\u06cc \u0641\u0627\u0626\u06cc \u0633\u06d2 \u0633\u06cc\u0644\u0648\u0644\u0631 \u0645\u0688 \u0633\u0679\u0631\u06cc\u0645 \u0645\u06cc\u06ba \u0628\u062f\u0644 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u0622\u067e \u06a9\u0627 \u0627\u0633\u0679\u0631\u06cc\u0645\u0646\u06af \u06a9\u0648\u0688 \u0627\u0633 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u0646\u0635\u0648\u0628\u06c1 \u0628\u0646\u062f\u06cc \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u0635\u0627\u0631\u0641 \u06a9\u0648 \u0627\u06cc\u06a9 \u062e\u0631\u0627\u0628\u06cc \u06cc\u0627 \u062c\u0648\u0627\u0628 \u0646\u0638\u0631 \u0622\u0626\u06d2 \u06af\u0627 \u062c\u0648 \u0628\u062d\u0627\u0644\u06cc \u06a9\u06d2 \u0628\u063a\u06cc\u0631 \u0631\u06a9 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u06cc\u06c1 \u0645\u0636\u0645\u0648\u0646 \u0627\u06cc\u06a9 \u0627\u0648\u067e\u0646 \u0633\u0648\u0631\u0633 \u0679\u0627\u0626\u067e \u0627\u0633\u06a9\u0631\u067e\u0679 \u0644\u0627\u0626\u0628\u0631\u06cc\u0631\u06cc \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062c\u0633\u06d2 Ore \u06a9\u06c1\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u0627\u0633 \u06a9\u06cc \u0639\u0645\u0644\u06cc \u0645\u062b\u0627\u0644 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0627\u06cc\u06a9 \u0627\u0633\u0679\u0631\u06cc\u0645\u0646\u06af \u06a9\u0644\u0627\u0626\u0646\u0679 \u06a9\u06cc\u0633\u06d2 \u0628\u0646\u0627\u06cc\u0627 \u062c\u0627\u0626\u06d2 \u062c\u0648 \u062d\u0642\u06cc\u0642\u06cc \u062f\u0646\u06cc\u0627 \u06a9\u06d2 \u0646\u06cc\u0679 \u0648\u0631\u06a9 \u06a9\u06d2 \u062d\u0627\u0644\u0627\u062a \u06a9\u0648 \u06c1\u06cc\u0646\u0688\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0628\u0634\u0645\u0648\u0644 \u062e\u0648\u062f \u06a9\u0627\u0631 \u0637\u0631\u06cc\u0642\u06d2 \u0633\u06d2 \u062f\u0648\u0628\u0627\u0631\u06c1 \u06a9\u0648\u0634\u0634\u06cc\u06ba\u060c \u0627\u06cc\u06a9 \u0622\u0641\u06cc\u0634\u0644 \u0633\u0631\u0648\u0631 \u0633\u06d2 \u0628\u06be\u06cc\u062c\u06d2 \u06af\u0626\u06d2 \u0627\u06cc\u0648\u0646\u0679\u0633 (SSE) \u06a9\u06cc \u062a\u062c\u0632\u06cc\u06c1 \u06a9\u0627\u0631\u06cc\u060c \u0627\u0648\u0631 React \u0627\u0648\u0631 React \u0633\u0631\u0648\u0631 \u06a9\u06d2 \u0627\u062c\u0632\u0627\u0621 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0635\u0627\u0641 \u0627\u0646\u0636\u0645\u0627\u0645\u06d4<\/p>\n<p>\u0622\u062e\u0631 \u0645\u06cc\u06ba\u060c \u0622\u067e \u0633\u0645\u062c\u06be \u062c\u0627\u0626\u06cc\u06ba \u06af\u06d2 \u06a9\u06c1 \u06a9\u0633 \u0637\u0631\u062d \u063a\u06cc\u0631 \u0645\u0637\u0627\u0628\u0642\u062a \u067e\u0630\u06cc\u0631 \u062c\u0646\u0631\u06cc\u0679\u0631\u0632\u060c Fetch API\u060c \u0627\u0648\u0631 SSE \u0648\u0636\u0627\u062d\u062a\u06cc\u06ba \u0688\u06cc\u0641\u0627\u0644\u0679 \u0633\u06d2 \u06a9\u06c1\u06cc\u06ba \u0632\u06cc\u0627\u062f\u06c1 \u0642\u0627\u0628\u0644 \u0628\u06be\u0631\u0648\u0633\u06c1 \u0686\u06cc\u0632 \u0628\u0646\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06a9\u0679\u06be\u06cc \u06c1\u0648\u062a\u06cc \u06c1\u06cc\u06ba\u06d4 <code>fetch<\/code> \u0627\u0648\u0631 <code>response.body.getReader()<\/code> \u0627\u0646\u06af\u0648\u0679\u06be\u06cc<\/p>\n<h2 id=\"heading-table-of-contents\">\u0627\u0646\u0688\u06cc\u06a9\u0633<\/h2>\n<ol>\n<li>\n<p>\u0634\u0631\u0637\u06cc\u06ba<\/p>\n<\/li>\n<li>\n<p>\u06a9\u06cc\u0627 \u0633\u06cc\u06a9\u06be\u0646\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0633\u0631\u0648\u0631 \u0633\u06d2 \u0628\u06be\u06cc\u062c\u06d2 \u06af\u0626\u06d2 \u0648\u0627\u0642\u0639\u0627\u062a \u06a9\u06cc\u0627 \u06c1\u06cc\u06ba\u061f<\/p>\n<\/li>\n<li>\n<p>\u0627\u067e\u0646\u06cc \u0645\u0631\u0636\u06cc \u06a9\u06d2 \u0645\u0637\u0627\u0628\u0642 \u0627\u0633\u0679\u0631\u06cc\u0645\u0646\u06af \u06a9\u0644\u0627\u0626\u0646\u0679 \u06a9\u06cc\u0648\u06ba \u0628\u0646\u0627\u0626\u06cc\u06ba\u061f<\/p>\n<\/li>\n<li>\n<p>\u063a\u06cc\u0631 \u0645\u0637\u0627\u0628\u0642\u062a \u067e\u0630\u06cc\u0631 \u062c\u0646\u0631\u06cc\u0679\u0631 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u06a9\u0686\u06d2 \u0679\u06a9\u0691\u0648\u06ba \u06a9\u0648 \u06a9\u06cc\u0633\u06d2 \u0627\u0633\u0679\u0631\u06cc\u0645 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0633\u0631\u0648\u0631 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06c1 \u0628\u06be\u06cc\u062c\u06d2 \u06af\u0626\u06d2 \u0648\u0627\u0642\u0639\u0627\u062a \u06a9\u0648 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u067e\u0627\u0631\u0633 \u06a9\u0631\u0646\u06d2 \u06a9\u0627 \u0637\u0631\u06cc\u0642\u06c1<\/p>\n<\/li>\n<li>\n<p>Last-Event-ID \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u062f\u0648\u0628\u0627\u0631\u06c1 \u06a9\u0646\u06a9\u0634\u0646 \u06a9\u0648 \u06a9\u06cc\u0633\u06d2 \u0646\u0627\u0641\u0630 \u06a9\u06cc\u0627 \u062c\u0627\u0626\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0628\u06cc\u06a9 \u0622\u0641 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u062f\u0648\u0628\u0627\u0631\u06c1 \u06a9\u0648\u0634\u0634\u0648\u06ba \u06a9\u0648 \u06a9\u06cc\u0633\u06d2 \u06c1\u06cc\u0646\u0688\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>React \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u0633 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u0633\u06d2 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0631\u06cc \u0627\u06cc\u06a9\u0679 \u0633\u0631\u0648\u0631 \u06a9\u06d2 \u0627\u062c\u0632\u0627\u0621 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u0633\u06d2 \u06a9\u06cc\u0633\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0646\u062a\u06cc\u062c\u06c1<\/p>\n<\/li>\n<\/ol>\n<h2 id=\"heading-prerequisites\">\u0634\u0631\u0637\u06cc\u06ba<\/h2>\n<p>\u067e\u06cc\u0631\u0648\u06cc \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0622\u067e \u06a9\u0648 \u0636\u0631\u0648\u0631\u062a \u06c1\u0648 \u06af\u06cc:<\/p>\n<ul>\n<li>\n<p>TypeScript \u06a9\u06cc \u06a9\u0627\u0645 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06cc \u0633\u0645\u062c\u06be<\/p>\n<\/li>\n<li>\n<p>\u0648\u0627\u0642\u0641 <code>fetch<\/code>, <code>ReadableStream<\/code>\u0627\u0648\u0631 <code>async<\/code>\/<code>await<\/code><\/p>\n<\/li>\n<li>\n<p>\u0631\u062f \u0639\u0645\u0644 \u06a9\u0627 \u0628\u0646\u06cc\u0627\u062f\u06cc \u0639\u0644\u0645 (\u0631\u062f \u0639\u0645\u0644 \u0633\u06d2 \u0645\u062a\u0639\u0644\u0642\u06c1 \u062d\u0635\u0648\u06ba \u06a9\u06d2 \u0644\u06cc\u06d2)<\/p>\n<\/li>\n<\/ul>\n<h2 id=\"heading-what-you-will-learn\">\u06a9\u06cc\u0627 \u0633\u06cc\u06a9\u06be\u0646\u0627 \u06c1\u06d2\u06d4<\/h2>\n<ul>\n<li>\n<p>\u0627\u0635\u0644 \u0645\u062a\u0646 \u06cc\u0627 \u0628\u0627\u0626\u0679\u0633 \u06a9\u0648 \u06a9\u06cc\u0633\u06d2 \u0633\u0679\u0631\u06cc\u0645 \u06a9\u0631\u06cc\u06ba\u06d4 <code>fetch<\/code> \u063a\u06cc\u0631 \u0645\u0637\u0627\u0628\u0642\u062a \u067e\u0630\u06cc\u0631 \u062c\u0646\u0631\u06cc\u0679\u0631 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u062c\u0648\u0627\u0628 \u062f\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0633\u0631\u0648\u0631 \u0641\u06cc\u0644\u0688 \u06a9\u06cc \u0637\u0631\u0641 \u0633\u06d2 \u0641\u06cc\u0644\u0688 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06c1 \u0628\u06be\u06cc\u062c\u06d2 \u06af\u0626\u06d2 \u0627\u06cc\u0648\u0646\u0679 \u06a9\u06cc \u062a\u0641\u0635\u06cc\u0644\u0627\u062a \u06a9\u0648 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u067e\u0627\u0631\u0633 \u06a9\u0631\u0646\u06d2 \u06a9\u0627 \u0637\u0631\u06cc\u0642\u06c1<\/p>\n<\/li>\n<li>\n<p>\u062e\u0648\u062f\u06a9\u0627\u0631 \u06a9\u0646\u06a9\u0634\u0646 \u06a9\u0648 \u06a9\u06cc\u0633\u06d2 \u0646\u0627\u0641\u0630 \u06a9\u06cc\u0627 \u062c\u0627\u0626\u06d2\u06d4 <code>Last-Event-ID<\/code> \u0627\u067e\u0646\u06d2 \u0627\u06cc\u0648\u0646\u0679 \u0633\u06d2 \u0645\u062d\u0631\u0648\u0645 \u0646\u06c1 \u06c1\u0648\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0627\u06cc\u06a9\u0633\u067e\u0648\u0646\u06cc\u0646\u0634\u0644 \u0628\u06cc\u06a9 \u0622\u0641 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u062f\u0648\u0628\u0627\u0631\u06c1 \u06a9\u0648\u0634\u0634\u0648\u06ba \u06a9\u0648 \u06a9\u06cc\u0633\u06d2 \u06c1\u06cc\u0646\u0688\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0631\u06cc \u0627\u06cc\u06a9\u0679 \u0627\u0633\u0679\u06cc\u0679 \u0627\u0648\u0631 \u0631\u06cc \u0627\u06cc\u06a9\u0679 \u0633\u0631\u0648\u0631 \u06a9\u06d2 \u0627\u062c\u0632\u0627\u0621 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u0633\u0679\u0631\u06cc\u0645\u0646\u06af \u06a9\u0644\u0627\u0626\u0646\u0679 \u06a9\u0648 \u06a9\u06cc\u0633\u06d2 \u0645\u0631\u0628\u0648\u0637 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<\/ul>\n<h2 id=\"heading-what-is-server-sent-events\">\u0633\u0631\u0648\u0631 \u0633\u06d2 \u0628\u06be\u06cc\u062c\u06d2 \u06af\u0626\u06d2 \u0648\u0627\u0642\u0639\u0627\u062a \u06a9\u06cc\u0627 \u06c1\u06cc\u06ba\u061f<\/h2>\n<p>\u0633\u0631\u0648\u0631 \u0633\u06d2 \u0628\u06be\u06cc\u062c\u06d2 \u06af\u0626\u06d2 \u0648\u0627\u0642\u0639\u0627\u062a (SSE) \u0627\u06cc\u06a9 \u06c1\u06cc HTTP \u06a9\u0646\u06a9\u0634\u0646 \u067e\u0631 \u0633\u0631\u0648\u0631 \u0633\u06d2 \u06a9\u0644\u0627\u0626\u0646\u0679 \u062a\u06a9 \u06cc\u06a9 \u0637\u0631\u0641\u06c1 \u0633\u0644\u0633\u0644\u06c1 \u0628\u0646\u062f\u06cc \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u0648\u06cc\u0628 \u0645\u0639\u06cc\u0627\u0631 \u06c1\u06d2\u06d4 WebSockets \u06a9\u06d2 \u0628\u0631\u0639\u06a9\u0633\u060c \u06cc\u06c1 \u0633\u0627\u062f\u06c1 HTTP \u06c1\u06d2\u060c \u0627\u0633 \u0644\u06cc\u06d2 \u06cc\u06c1 \u0645\u0648\u062c\u0648\u062f\u06c1 \u0627\u0646\u0641\u0631\u0627\u0633\u0679\u0631\u06a9\u0686\u0631 \u062c\u06cc\u0633\u06d2 \u0644\u0648\u0688 \u0628\u06cc\u0644\u0646\u0633\u0631\u0632 \u0627\u0648\u0631 \u067e\u0631\u0627\u06a9\u0633\u06cc\u0632 \u067e\u0631 \u0628\u063a\u06cc\u0631 \u06a9\u0633\u06cc \u062e\u0627\u0635 \u062a\u0631\u062a\u06cc\u0628 \u06a9\u06d2 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>SSE \u06a9\u0627 \u062c\u0648\u0627\u0628 \u062a\u0627\u0631 \u067e\u0631 \u062f\u0631\u062c \u0630\u06cc\u0644 \u06c1\u06d2:<\/p>\n<pre><code class=\"language-plaintext\">event: update\nid: 42\ndata: {\"status\": \"processing\"}\n\nevent: update\nid: 43\ndata: {\"status\": \"complete\"}\n<\/code><\/pre>\n<p>\u06c1\u0631 \u0648\u0627\u0642\u0639\u06c1 \u06a9\u0648 \u062e\u0627\u0644\u06cc \u0644\u0627\u0626\u0646 \u0633\u06d2 \u0627\u0644\u06af \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u06a9\u06c1 <code>data<\/code> \u0645\u06cc\u062f\u0627\u0646 \u067e\u06d2 \u0644\u0648\u0688 \u0644\u06d2 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c <code>event<\/code> \u0648\u0627\u0642\u0639\u06c1 \u06a9\u06cc \u0642\u0633\u0645 \u06a9\u0627 \u0646\u0627\u0645 \u062f\u06cc\u06ba \u0627\u0648\u0631 <code>id<\/code> \u06a9\u0644\u0627\u0626\u0646\u0679 \u062f\u0648\u0628\u0627\u0631\u06c1 \u062c\u0691\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0633\u0679\u0631\u06cc\u0645 \u0645\u06cc\u06ba \u0627\u067e\u0646\u06cc \u067e\u0648\u0632\u06cc\u0634\u0646 \u06a9\u0648 \u0679\u0631\u06cc\u06a9 \u06a9\u0631 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0628\u0631\u0627\u0624\u0632\u0631 \u0645\u06cc\u06ba \u062f\u0631\u062c \u0630\u06cc\u0644 \u062e\u0635\u0648\u0635\u06cc\u0627\u062a \u0634\u0627\u0645\u0644 \u06c1\u06cc\u06ba: <code>EventSource<\/code> \u06cc\u06c1 \u0627\u0633 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 API \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u0627\u0633 \u06a9\u06cc \u0639\u0645\u0644\u06cc \u062d\u062f\u0648\u062f \u06c1\u06cc\u06ba\u060c \u0628\u0634\u0645\u0648\u0644 \u06a9\u0648\u0626\u06cc \u06a9\u0633\u0679\u0645 \u06c1\u06cc\u0688\u0631\u060c \u06a9\u0648\u0626\u06cc POST \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u06cc\u06ba\u060c \u0627\u0648\u0631 \u0628\u0631\u0627\u0624\u0632\u0631\u0632 \u0645\u06cc\u06ba \u062f\u0648\u0628\u0627\u0631\u06c1 \u06a9\u0646\u06a9\u0634\u0646 \u06a9\u0627 \u0645\u062a\u0636\u0627\u062f \u0631\u0648\u06cc\u06c1\u06d4 \u0622\u0633\u0627\u0646 \u062a\u0631\u06cc\u0646 \u0635\u0648\u0631\u062a\u0648\u06ba \u0633\u06d2 \u06c1\u0679 \u06a9\u0631\u060c \u0622\u067e \u06a9\u0648 \u0627\u06a9\u062b\u0631 \u062e\u0648\u062f \u0627\u0633 \u0633\u0644\u0633\u0644\u06d2 \u06a9\u0648 \u067e\u0627\u0631\u0633 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-why-build-a-custom-streaming-client\">\u0627\u067e\u0646\u06cc \u0645\u0631\u0636\u06cc \u06a9\u06d2 \u0645\u0637\u0627\u0628\u0642 \u0627\u0633\u0679\u0631\u06cc\u0645\u0646\u06af \u06a9\u0644\u0627\u0626\u0646\u0679 \u06a9\u06cc\u0648\u06ba \u0628\u0646\u0627\u0626\u06cc\u06ba\u061f<\/h2>\n<p>\u0628\u06c1\u062a \u0633\u06d2 \u0633\u0679\u0631\u06cc\u0645\u0646\u06af \u06a9\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06d2 \u06a9\u06cc\u0633\u0632\u060c \u062c\u06cc\u0633\u06d2 \u06a9\u06c1 AI \u0686\u06cc\u0679 \u06a9\u06d2 \u062c\u0648\u0627\u0628\u0627\u062a\u060c SSE \u062a\u0641\u0635\u06cc\u0644\u0627\u062a \u06a9\u0648 \u0628\u0627\u0644\u06a9\u0644 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0648\u06c1 \u062e\u0627\u0645 \u0645\u062a\u0646 \u06a9\u06d2 \u0635\u0631\u0641 \u0679\u06a9\u0691\u06d2 \u06c1\u06cc\u06ba \u062c\u0648 \u0648\u0642\u062a \u06a9\u06d2 \u0633\u0627\u062a\u06be \u067e\u06c1\u0646\u0686\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u062f\u06cc\u06af\u0631 \u0645\u0639\u0627\u0645\u0644\u0627\u062a\u060c \u062c\u06cc\u0633\u06d2 \u0631\u06cc\u0626\u0644 \u0679\u0627\u0626\u0645 \u0627\u0637\u0644\u0627\u0639\u0627\u062a\u060c SSE \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062f\u06c1 \u0688\u06be\u0627\u0646\u0686\u06d2 \u0633\u06d2 \u0641\u0627\u0626\u062f\u06c1 \u0627\u0679\u06be\u0627\u062a\u06d2 \u06c1\u06cc\u06ba: \u0646\u0627\u0645\u0632\u062f \u0648\u0627\u0642\u0639\u0627\u062a\u060c IDs \u06a9\u0627 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0627\u0633\u062a\u0639\u0645\u0627\u0644\u060c \u0627\u0648\u0631 \u0633\u0631\u0648\u0631 \u06a9\u06d2 \u0632\u06cc\u0631 \u06a9\u0646\u0679\u0631\u0648\u0644 \u062f\u0648\u0628\u0627\u0631\u06c1 \u06a9\u0648\u0634\u0634 \u06a9\u06d2 \u0648\u0642\u0641\u06d2\u06d4<\/p>\n<p>\u0627\u06cc\u0633\u06a9 \u062f\u0648 \u0627\u0644\u06af \u0627\u0644\u06af \u06a9\u0627\u0645\u0648\u06ba \u0645\u06cc\u06ba \u062f\u0648\u0646\u0648\u06ba \u06a9\u0648 \u06c1\u06cc\u0646\u0688\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<ul>\n<li>\n<p><code>stream()<\/code>    \u0641\u0627\u0631\u0645\u06cc\u0679 \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u06a9\u0633\u06cc \u0645\u0641\u0631\u0648\u0636\u06d2 \u06a9\u06d2 \u0628\u063a\u06cc\u0631 \u062e\u0627\u0645 \u0645\u062a\u0646 \u06cc\u0627 \u0628\u0627\u0626\u0679\u0633 \u06a9\u0648 \u0627\u0633\u0679\u0631\u06cc\u0645 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><code>streamSSE()<\/code>    \u062e\u0635\u0648\u0635\u06cc\u062a \u06a9\u06d2 \u0645\u0637\u0627\u0628\u0642 SSE \u067e\u0627\u0631\u0633\u0646\u06af \u06a9\u06d2 \u0644\u06cc\u06d2<\/p>\n<\/li>\n<\/ul>\n<p>\u062f\u0648\u0646\u0648\u06ba \u063a\u06cc\u0631 \u0645\u0637\u0627\u0628\u0642\u062a \u067e\u0630\u06cc\u0631 \u062c\u0646\u0631\u06cc\u0679\u0631 \u06c1\u06cc\u06ba\u060c \u0644\u06c1\u0630\u0627 \u06a9\u0627\u0644 \u0633\u0627\u0626\u0679 \u067e\u0631 \u062f\u0648\u0646\u0648\u06ba \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u0627\u06cc\u06a9 \u062c\u06cc\u0633\u0627 \u0646\u0638\u0631 \u0622\u0626\u06d2 \u06af\u0627\u06d4<\/p>\n<pre><code class=\"language-typescript\">for await (const chunk of stream(\"https:\/\/api.example.com\/chat\")) {\n  console.log(chunk);\n}\n<\/code><\/pre>\n<h2 id=\"heading-how-to-stream-raw-chunks-with-an-async-generator\">\u063a\u06cc\u0631 \u0645\u0637\u0627\u0628\u0642\u062a \u067e\u0630\u06cc\u0631 \u062c\u0646\u0631\u06cc\u0679\u0631 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u06a9\u0686\u06d2 \u0679\u06a9\u0691\u0648\u06ba \u06a9\u0648 \u06a9\u06cc\u0633\u06d2 \u0627\u0633\u0679\u0631\u06cc\u0645 \u06a9\u0631\u06cc\u06ba\u06d4<\/h2>\n<p>\u0633\u0628 \u0633\u06d2 \u0622\u0633\u0627\u0646 \u0645\u0639\u0627\u0645\u0644\u06c1 \u062e\u0627\u0645 \u0645\u062a\u0646 \u06a9\u0648 \u0627\u0633\u0679\u0631\u06cc\u0645 \u06a9\u0631\u0646\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 AI \u062c\u0648\u0627\u0628\u0627\u062a \u06cc\u0627 \u0644\u0627\u06af \u0679\u06cc\u0644 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u0641\u06cc\u062f \u06c1\u06d2 \u062c\u06c1\u0627\u06ba \u0627\u06cc\u0648\u0646\u0679 \u06a9\u0627 \u06a9\u0648\u0626\u06cc \u0688\u06be\u0627\u0646\u0686\u06c1 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u060c \u0635\u0631\u0641 \u0628\u0627\u0626\u0679\u0633 \u06a9\u0627 \u0627\u06cc\u06a9 \u0633\u0644\u0633\u0644\u06c1 \u0648\u0642\u062a \u06a9\u06d2 \u0633\u0627\u062a\u06be \u067e\u06c1\u0646\u0686\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u06cc\u06c1\u0627\u06ba \u06a9\u0644\u06cc\u062f \u06c1\u06d2 <code>stream()<\/code>:<\/p>\n<pre><code class=\"language-typescript\">export async function* stream(\n  url: string,\n  options?: StreamOptions\n): AsyncGenerator<string uint8array=\"\" void=\"\" unknown=\"\"> {\n  const { headers, retries = 3, signal, decode = true } = options || {};\n\n  let retryCount = 0;\n\n  while (retryCount <= retries) {\n    try {\n      const response = await fetch(url, { method: \"GET\", headers, signal });\n\n      if (!response.body) {\n        throw new Error(\"Response body is null\");\n      }\n\n      const reader = response.body.getReader();\n      const decoder = new TextDecoder();\n\n      try {\n        while (true) {\n          const { done, value } = await reader.read();\n          if (done) break;\n          yield decode ? decoder.decode(value, { stream: true }) : value;\n        }\n      } finally {\n        reader.releaseLock();\n      }\n\n      return;\n    } catch (error: any) {\n      if (signal?.aborted) throw error;\n      retryCount++;\n      if (retryCount > retries) {\n        throw new Error(`Max retries exceeded. Last error: ${error.message}`);\n      }\n      await new Promise((r) => setTimeout(r, 1000 * retryCount));\n    }\n  }\n}\n<\/string><\/code><\/pre>\n<p>\u0688\u06cc\u0632\u0627\u0626\u0646 \u06a9\u06d2 \u0686\u0646\u062f \u0641\u06cc\u0635\u0644\u06d2 \u0642\u0627\u0628\u0644 \u0630\u06a9\u0631 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u06cc\u06c1 \u0641\u0646\u06a9\u0634\u0646 \u0627\u06cc\u06a9 \u063a\u06cc\u0631 \u0645\u0637\u0627\u0628\u0642\u062a \u067e\u0630\u06cc\u0631 \u062c\u0646\u0631\u06cc\u0679\u0631 \u06c1\u06d2 (<code>async function*<\/code>) \u062a\u0627\u06a9\u06c1 \u06a9\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631 \u0633\u06a9\u06d2\u06d4 <code>for await...of<\/code> \u0644\u06cc\u0688\u0631\u0648\u06ba \u0627\u0648\u0631 \u0644\u0648\u067e\u0633 \u06a9\u0648 \u062f\u0633\u062a\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0645\u0646\u0638\u0645 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2\u06d4 \u0627\u0635\u0644 \u06a9\u0648 \u0628\u06d2 \u0646\u0642\u0627\u0628 \u06a9\u0631\u0646\u06d2 \u0645\u06cc\u06ba \u06cc\u06c1\u06cc \u0641\u0631\u0642 \u06c1\u06d2\u06d4 <code>ReadableStream<\/code> \u0627\u0648\u0631 \u06cc\u06c1 \u0627\u0646 \u0686\u06cc\u0632\u0648\u06ba \u06a9\u0648 \u0628\u06d2 \u0646\u0642\u0627\u0628 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062c\u0648 \u06a9\u06be\u067e\u062a \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0686\u06be\u06cc \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u06a9\u06c1 <code>finally<\/code> \u0628\u0644\u0627\u06a9 \u06c1\u0645\u06cc\u0634\u06c1 \u0631\u06cc\u0688\u0631 \u0644\u0627\u06a9 \u06a9\u0648 \u062c\u0627\u0631\u06cc \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u06cc\u06c1\u0627\u06ba \u062a\u06a9 \u06a9\u06c1 \u0627\u06af\u0631 \u0644\u0648\u067e \u0627\u0633 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u062c\u0644\u062f \u0628\u0627\u06c1\u0631 \u0646\u06a9\u0644 \u062c\u0627\u0626\u06d2: <code>break<\/code> \u06cc\u0627 \u0627\u06cc\u06a9 \u0627\u0633\u062a\u062b\u0646\u0627\u0621\u06d4 \u0627\u0633 \u06a9\u0648 \u0628\u06be\u0648\u0644 \u062c\u0627\u0646\u0627 \u0633\u0679\u0631\u06cc\u0645 \u0644\u06cc\u06a9 \u06a9\u06cc \u0627\u06cc\u06a9 \u0639\u0627\u0645 \u0648\u062c\u06c1 \u06c1\u06d2\u06d4<\/p>\n<p>\u062f\u0648\u0628\u0627\u0631\u06c1 \u06a9\u0648\u0634\u0634 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u0627 \u0644\u0648\u067e \u0635\u0631\u0641 \u0627\u0633 \u0645\u06cc\u06ba \u063a\u0644\u0637\u06cc\u0627\u06ba \u067e\u06a9\u0691\u062a\u0627 \u06c1\u06d2: <code>fetch<\/code> \u06a9\u0627\u0644 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0644\u0648\u067e \u067e\u0691\u06be\u06cc\u06ba\u06d4 \u0627\u06af\u0631 <code>AbortSignal<\/code> \u0627\u06af\u0631 \u06cc\u06c1 \u0646\u0627\u06a9\u0627\u0645\u06cc \u06a9\u06cc \u0648\u062c\u06c1 \u06c1\u06d2\u060c \u062a\u0648 \u062c\u0627\u0646 \u0628\u0648\u062c\u06be \u06a9\u0631 \u0645\u0646\u0633\u0648\u062e\u06cc \u06a9\u06cc \u062f\u0648\u0628\u0627\u0631\u06c1 \u06a9\u0648\u0634\u0634 \u06a9\u0631\u0646\u0627 \u06a9\u0648\u0626\u06cc \u0645\u0639\u0646\u06cc \u0646\u06c1\u06cc\u06ba \u0631\u06a9\u06be\u062a\u0627\u060c \u0644\u06c1\u0630\u0627 \u062f\u0648\u0628\u0627\u0631\u06c1 \u06a9\u0648\u0634\u0634 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2\u060c \u0622\u067e \u0627\u0633\u06d2 \u0641\u0648\u0631\u06cc \u0637\u0648\u0631 \u067e\u0631 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0627\u0679\u06be\u0627 \u062f\u06cc\u06ba\u06d4<\/p>\n<h2 id=\"heading-how-to-parse-server-sent-events-by-hand\">\u0633\u0631\u0648\u0631 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06c1 \u0628\u06be\u06cc\u062c\u06d2 \u06af\u0626\u06d2 \u0648\u0627\u0642\u0639\u0627\u062a \u06a9\u0648 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u067e\u0627\u0631\u0633 \u06a9\u0631\u0646\u06d2 \u06a9\u0627 \u0637\u0631\u06cc\u0642\u06c1<\/h2>\n<p>SSE \u062a\u0635\u0631\u06cc\u062d \u0627\u06cc\u06a9 \u0633\u0627\u062f\u06c1 \u0679\u06cc\u06a9\u0633\u0679 \u0641\u0627\u0631\u0645\u06cc\u0679 \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u0627\u0633\u06d2 \u0635\u062d\u06cc\u062d \u0637\u0631\u06cc\u0642\u06d2 \u0633\u06d2 \u067e\u0627\u0631\u0633 \u06a9\u0631\u0646\u06d2 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u0628\u06c1\u062a \u0633\u06d2 \u0627\u06cc\u062c \u06a9\u06cc\u0633\u0632 \u06a9\u0648 \u0633\u0646\u0628\u06be\u0627\u0644\u0646\u0627\u060c \u062c\u06cc\u0633\u06d2 \u06a9\u06c1 \u0688\u06cc\u0679\u0627 \u06a9\u06cc \u0627\u06cc\u06a9 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u0644\u0627\u0626\u0646\u0648\u06ba \u0645\u06cc\u06ba \u062a\u0642\u0633\u06cc\u0645 \u06c1\u0648\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u0648\u0627\u0642\u0639\u0627\u062a\u060c \u0628\u0691\u06cc \u0622\u0646\u062a \u0633\u06d2 \u0634\u0631\u0648\u0639 \u06c1\u0648\u0646\u06d2 \u0648\u0627\u0644\u06cc \u06a9\u0645\u0646\u0679 \u0644\u0627\u0626\u0646\u0632\u060c \u0628\u063a\u06cc\u0631 \u0642\u062f\u0631 \u0648\u0627\u0644\u06cc \u0641\u06cc\u0644\u0688\u0632\u060c \u0627\u0648\u0631 \u0679\u06a9\u0691\u0648\u06ba \u06a9\u06d2 \u0622\u062e\u0631 \u0645\u06cc\u06ba \u0646\u0627\u0645\u06a9\u0645\u0644 \u0644\u0627\u0626\u0646\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u0646\u062f\u0631 \u06a9\u06cc \u0628\u0646\u06cc\u0627\u062f\u06cc \u0631\u06cc\u0627\u0633\u062a \u0645\u0634\u06cc\u0646 \u06c1\u06d2: <code>streamSSE()<\/code>:<\/p>\n<pre><code class=\"language-typescript\">let buffer = \"\";\nlet currentEvent: Partial<sseevent> = { data: \"\", event: null, id: null };\nlet hasData = false;\n\nwhile (true) {\n  const { done, value } = await reader.read();\n  if (done) break;\n\n  buffer += decoder.decode(value, { stream: true });\n  const lines = buffer.split(\/\\r\\n|\\r|\\n\/);\n  buffer = lines.pop() || \"\"; \/\/ keep the last incomplete line for the next chunk\n\n  for (const line of lines) {\n    if (line === \"\") {\n      if (hasData) {\n        const event: SSEEvent = {\n          id: currentEvent.id ?? lastEventId,\n          event: currentEvent.event ?? null,\n          data: currentEvent.data!.endsWith(\"\\n\")\n            ? currentEvent.data!.slice(0, -1)\n            : currentEvent.data!,\n          retry: currentEvent.retry,\n        };\n        if (event.id) lastEventId = event.id;\n        yield event;\n        currentEvent = { data: \"\", event: null, id: null };\n        hasData = false;\n      }\n      continue;\n    }\n\n    if (line.startsWith(\":\")) continue; \/\/ comment line, ignore\n\n    const colonIndex = line.indexOf(\":\");\n    const field = colonIndex === -1 ? line : line.slice(0, colonIndex);\n    let valueStr = colonIndex === -1 ? \"\" : line.slice(colonIndex + 1);\n    if (valueStr.startsWith(\" \")) valueStr = valueStr.slice(1);\n\n    switch (field) {\n      case \"data\":\n        currentEvent.data += valueStr + \"\\n\";\n        hasData = true;\n        break;\n      case \"event\":\n        currentEvent.event = valueStr;\n        break;\n      case \"id\":\n        if (valueStr.indexOf(\"\\0\") === -1) currentEvent.id = valueStr;\n        break;\n      case \"retry\":\n        const retry = parseInt(valueStr, 10);\n        if (!isNaN(retry)) retryInterval = retry;\n        break;\n    }\n  }\n}\n<\/sseevent><\/code><\/pre>\n<p>\u0646\u06cc\u0679 \u0648\u0631\u06a9 \u06a9\u06d2 \u062d\u0635\u06d2 \u0644\u0627\u0626\u0646 \u06a9\u06cc \u062d\u062f\u0648\u062f \u06a9\u0627 \u0627\u062d\u062a\u0631\u0627\u0645 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0627\u06a9\u06cc\u0644\u0627 <code>read()<\/code> \u0686\u0648\u0646\u06a9\u06c1 \u06a9\u0627\u0644 \u0627\u06cc\u06a9 \u0627\u0646\u0679\u0631\u0645\u06cc\u0688\u06cc\u0679 \u0644\u0627\u0626\u0646 \u067e\u0631 \u062e\u062a\u0645 \u06c1\u0648 \u0633\u06a9\u062a\u06cc \u06c1\u06d2\u060c \u0627\u0633 \u0644\u06cc\u06d2 \u0622\u062e\u0631\u06cc \u0644\u0627\u0626\u0646 \u062c\u0648 \u0646\u0627\u0645\u06a9\u0645\u0644 \u06c1\u0648 \u0633\u06a9\u062a\u06cc \u06c1\u06d2 \u06c1\u0648\u0644\u0688 \u067e\u0631 \u0631\u06a9\u06be\u06cc \u062c\u0627\u062a\u06cc \u06c1\u06d2\u06d4 <code>buffer<\/code> \u0627\u0633 \u067e\u0631 \u062c\u0644\u062f \u06a9\u0627\u0631\u0631\u0648\u0627\u0626\u06cc \u0646\u06c1\u06cc\u06ba \u06a9\u06cc \u062c\u0627\u062a\u06cc \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u0633\u06d2 \u0627\u06af\u0644\u06d2 \u062d\u0635\u06d2 \u0645\u06cc\u06ba \u0634\u0627\u0645\u0644 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0627\u06cc\u0633 \u0627\u06cc\u0633 \u0627\u06cc \u067e\u0627\u0631\u0633\u0646\u06af \u06a9\u0627 \u0648\u06c1 \u062d\u0635\u06c1 \u06c1\u06d2 \u062c\u0633 \u06a9\u0648 \u063a\u0644\u0637 \u06a9\u0631\u0646\u0627 \u0622\u0633\u0627\u0646 \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u062c\u0628 \u0622\u067e \u06a9\u0633\u06cc \u0633\u0627\u062f\u06c1 \u0644\u0648\u062d\u06cc \u067e\u0631 \u067e\u06c1\u0646\u0686 \u062c\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>response.text()<\/code> \u0627\u0648\u0631 \u062a\u0627\u0631 \u06a9\u06cc \u062a\u0642\u0633\u06cc\u0645\u06d4<\/p>\n<p>\u062e\u0627\u0644\u06cc \u0644\u0627\u0626\u0646 \u0648\u06c1 \u0644\u0627\u0626\u0646 \u06c1\u06d2 \u062c\u0648 \u0648\u0627\u0642\u0639\u06c1 \u06a9\u0648 \u062e\u062a\u0645 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 SSE \u0627\u06cc\u0648\u0646\u0679\u0633 \u0645\u06cc\u06ba \u0641\u06a9\u0633\u0688 \u0644\u06cc\u0646\u062a\u06be \u06c1\u06cc\u0688\u0631\u0632 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0642\u06cc\u0627\u0633 \u06a9\u06d2 \u0645\u0637\u0627\u0628\u0642\u060c \u0627\u06cc\u06a9 \u062e\u0627\u0644\u06cc \u0644\u0627\u0626\u0646 \u0627\u06cc\u06a9 \u0628\u0627\u0624\u0646\u0688\u0631\u06cc \u06a9\u0648 \u0646\u0634\u0627\u0646 \u0632\u062f \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u060c \u0644\u06c1\u0630\u0627 \u062a\u062c\u0632\u06cc\u06c1 \u06a9\u0627\u0631 \u0635\u0631\u0641 \u0627\u0633 \u06a9\u06cc \u062c\u0627\u0646\u0686 \u067e\u0691\u062a\u0627\u0644 \u06a9\u06d2 \u0628\u0639\u062f \u06c1\u06cc \u0627\u06cc\u06a9 \u0648\u0627\u0642\u0639\u06c1 \u062a\u06cc\u0627\u0631 \u06a9\u0631\u06d2 \u06af\u0627\u06d4<\/p>\n<p>\u06a9\u06c1 <code>id<\/code> \u06a9\u0633\u06cc \u0641\u06cc\u0644\u0688 \u06a9\u0648 \u06cc\u06a9\u0633\u0631 \u0645\u0633\u062a\u0631\u062f \u06a9\u0631 \u062f\u06cc\u0627 \u062c\u0627\u0626\u06d2 \u06af\u0627 \u0627\u06af\u0631 \u0627\u0633 \u0645\u06cc\u06ba \u062a\u0635\u0631\u06cc\u062d \u06a9\u06d2 \u0645\u0637\u0627\u0628\u0642 null \u0628\u0627\u0626\u0679\u0633 \u06c1\u0648\u06ba\u06d4 \u06cc\u06c1 \u0648\u06c1 \u0686\u06be\u0648\u0679\u06cc \u062a\u0641\u0635\u06cc\u0644\u0627\u062a \u06c1\u06cc\u06ba \u062c\u0648 \u062f\u0633\u062a\u06a9\u0627\u0631\u06cc \u0633\u06d2 \u0628\u0646\u0627\u0626\u06d2 \u06af\u0626\u06d2 \u0639\u0645\u0644 \u06a9\u0648 \u067e\u06c1\u0644\u06cc \u06a9\u0648\u0634\u0634 \u0645\u06cc\u06ba \u0679\u06be\u06cc\u06a9 \u06a9\u0627\u0645 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u06cc \u06c1\u06cc\u06ba\u06d4<\/p>\n<h2 id=\"heading-how-to-implement-reconnection-with-last-event-id\">Last-Event-ID \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u062f\u0648\u0628\u0627\u0631\u06c1 \u06a9\u0646\u06a9\u0634\u0646 \u06a9\u0648 \u06a9\u06cc\u0633\u06d2 \u0646\u0627\u0641\u0630 \u06a9\u06cc\u0627 \u062c\u0627\u0626\u06d2\u06d4<\/h2>\n<p>\u06cc\u06c1 SSE \u06a9\u0627 \u0648\u06c1 \u062d\u0635\u06c1 \u06c1\u06d2 \u062c\u0648 \u0631\u06cc\u06af\u0648\u0644\u0631 \u06a9\u06d2 \u0645\u0642\u0627\u0628\u0644\u06d2 \u062d\u0642\u06cc\u0642\u06cc \u0641\u0648\u0627\u0626\u062f \u067e\u06cc\u0634 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 <code>fetch<\/code> \u0633\u0644\u0633\u0644\u06c1: \u0622\u067e \u06a9\u06d2 \u0645\u0642\u0627\u0645 \u06a9\u0648 \u06a9\u06be\u0648\u0646\u06d2 \u06a9\u06d2 \u0628\u063a\u06cc\u0631 \u06a9\u0646\u06a9\u0634\u0646 \u06a9\u06be\u0648 \u062c\u0627\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f \u062f\u0648\u0628\u0627\u0631\u06c1 \u0634\u0631\u0648\u0639 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0628\u0644\u0679 \u0627\u0646 \u0633\u067e\u0648\u0631\u0679\u06d4<\/p>\n<pre><code class=\"language-typescript\">let lastEventId: string | null = null;\n\nwhile (retryCount <= retries) {\n  const headers = { ...customHeaders };\n  if (lastEventId) {\n    (headers as any)[\"Last-Event-ID\"] = lastEventId;\n  }\n\n  const response = await fetch(url, { method: \"GET\", headers, signal });\n  \/\/ ... read and parse events, updating lastEventId as they arrive\n}\n<\/code><\/pre>\n<p>\u062c\u0628 \u0628\u06be\u06cc \u06a9\u0648\u0626\u06cc \u0648\u0627\u0642\u0639\u06c1 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 <code>id<\/code> \u0645\u06cc\u062f\u0627\u0646 \u0645\u06cc\u06ba \u067e\u06c1\u0646\u0686 \u06a9\u0631\u060c <code>lastEventId<\/code> \u0627\u0633\u06d2 \u0627\u067e \u0688\u06cc\u0679 \u06a9\u06cc\u0627 \u062c\u0627\u0626\u06d2 \u06af\u0627\u06d4 \u062c\u0628 \u06a9\u0646\u06a9\u0634\u0646 \u0679\u0648\u0679 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u06a9\u0644\u0627\u0626\u0646\u0679 \u062f\u0648\u0628\u0627\u0631\u06c1 \u062c\u0691 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 <code>Last-Event-ID<\/code> \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u06d2 \u06c1\u06cc\u0688\u0631 \u0645\u06cc\u06ba\u06d4 \u0627\u06cc\u06a9 \u0627\u0686\u06be\u0627 \u0628\u0631\u062a\u0627\u0624 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u0627 \u0633\u0631\u0648\u0631 \u06c1\u0631 \u0686\u06cc\u0632 \u06a9\u0648 \u0686\u0644\u0627\u0646\u06d2 \u06cc\u0627 \u0686\u06be\u0648\u0691\u0646\u06d2 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0627\u0633 \u06c1\u06cc\u0688\u0631 \u06a9\u0648 \u0635\u062d\u06cc\u062d \u0645\u0642\u0627\u0645 \u067e\u0631 \u0633\u0644\u0633\u0644\u06c1 \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0634\u0631\u0648\u0639 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u06cc\u06c1 \u0635\u0631\u0641 \u0627\u0633 \u0635\u0648\u0631\u062a \u0645\u06cc\u06ba \u06a9\u0627\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062c\u0628 \u0633\u0631\u0648\u0631 \u0627\u0635\u0644 \u0645\u06cc\u06ba \u06c1\u06cc\u0688\u0631 \u06a9\u0627 \u0627\u062d\u062a\u0631\u0627\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0644\u06c1\u0630\u0627\u060c \u06cc\u06c1 \u06a9\u0644\u0627\u0626\u0646\u0679 \u0627\u0648\u0631 \u0633\u0631\u0648\u0631 \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u0627\u06cc\u06a9 \u0645\u0639\u0627\u06c1\u062f\u06c1 \u06c1\u06d2\u060c \u0646\u06c1 \u06a9\u06c1 \u0627\u06cc\u0633\u06cc \u06a9\u0648\u0626\u06cc \u0686\u06cc\u0632 \u062c\u0633 \u06a9\u06cc \u06a9\u0644\u0627\u0626\u0646\u0679 \u0627\u06a9\u06cc\u0644\u06d2 \u0636\u0645\u0627\u0646\u062a \u062f\u06d2 \u0633\u06a9\u06d2\u06d4 \u0644\u06cc\u06a9\u0646 \u0627\u0633 \u0628\u0627\u062a \u06a9\u0648 \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u0646\u0627 \u06a9\u06c1 \u06a9\u0644\u0627\u0626\u0646\u0679 \u06a9\u0648 \u0679\u0631\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0646\u06c1\u06cc\u06ba \u062f\u0631\u0633\u062a \u0637\u0631\u06cc\u0642\u06d2 \u0633\u06d2 \u0645\u0646\u062a\u0642\u0644 \u06a9\u0631\u06cc\u06ba \u0627\u0633 \u0645\u0639\u0627\u06c1\u062f\u06d2 \u06a9\u0627 \u0627\u06cc\u06a9 \u0636\u0631\u0648\u0631\u06cc \u0646\u0635\u0641 \u062d\u0635\u06c1 \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-how-to-handle-retries-with-backoff\">\u0628\u06cc\u06a9 \u0622\u0641 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u062f\u0648\u0628\u0627\u0631\u06c1 \u06a9\u0648\u0634\u0634\u0648\u06ba \u06a9\u0648 \u06a9\u06cc\u0633\u06d2 \u06c1\u06cc\u0646\u0688\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/h2>\n<p>\u062f\u0648\u0646\u0648\u06ba <code>stream()<\/code> \u0627\u0648\u0631 <code>streamSSE()<\/code> \u0627\u06af\u0631 \u06cc\u06c1 \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648\u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u06cc\u06c1 \u062f\u0648\u0628\u0627\u0631\u06c1 \u06a9\u0648\u0634\u0634 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648\u0646\u06d2 \u06a9\u06d2 \u0644\u062d\u0627\u0638 \u0633\u06d2 \u06cc\u06c1 \u062a\u06be\u0648\u0691\u0627 \u0633\u0627 \u0645\u062e\u062a\u0644\u0641 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><code>stream()<\/code>    \u06cc\u06c1 \u062f\u0648\u0628\u0627\u0631\u06c1 \u06a9\u0648\u0634\u0634\u0648\u06ba \u06a9\u06cc \u062a\u0639\u062f\u0627\u062f \u0633\u06d2 \u0645\u0646\u0633\u0644\u06a9 \u0627\u06cc\u06a9 \u0633\u0627\u062f\u06c1 \u0644\u06a9\u06cc\u0631\u06cc \u0628\u06cc\u06a9 \u0622\u0641 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-typescript\">await new Promise((resolve) => setTimeout(resolve, 1000 * retryCount));\n<\/code><\/pre>\n<p><code>streamSSE()<\/code>    \u0633\u0631\u0648\u0631 \u06a9\u06cc \u0648\u0636\u0627\u062d\u062a \u06a9\u0627 \u0627\u062d\u062a\u0631\u0627\u0645 \u06a9\u0631\u06cc\u06ba\u06d4 <code>retry<\/code> \u0627\u06af\u0631 \u0641\u06cc\u0644\u0688 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u06cc \u06af\u0626\u06cc \u06c1\u06d2\u060c \u062a\u0648 \u0627\u0633\u06d2 SSE \u062a\u0641\u0635\u06cc\u0644\u0627\u062a \u0633\u06d2 \u06c1\u0679\u0627 \u062f\u06cc\u06ba\u060c \u0628\u0635\u0648\u0631\u062a \u062f\u06cc\u06af\u0631 \u0627\u0633 \u06a9\u06cc \u0688\u06cc\u0641\u0627\u0644\u0679 \u0642\u062f\u0631 \u067e\u0631 \u0648\u0627\u067e\u0633 \u062c\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-typescript\">let retryInterval = 1000;\n\/\/ ... updated from the \"retry\" field if the server sends one\nawait new Promise((r) => setTimeout(r, retryInterval));\n<\/code><\/pre>\n<p>\u0639\u0645\u0644\u06cc \u0637\u0648\u0631 \u067e\u0631\u060c \u0633\u0631\u0648\u0631 \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u06a9\u0648\u0634\u0634 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0648\u0642\u0641\u06d2 \u06a9\u0648 \u0645\u062a\u0627\u062b\u0631 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u0646\u0627 \u0636\u0631\u0648\u0631\u06cc \u06c1\u06d2\u06d4 \u0628\u0648\u062c\u06be \u06a9\u06d2 \u0646\u06cc\u0686\u06d2 \u0627\u06cc\u06a9 \u0633\u0631\u0648\u0631 \u0627\u067e\u0646\u06d2 \u06af\u0627\u06c1\u06a9\u0648\u06ba \u06a9\u0648 \u0632\u06cc\u0627\u062f\u06c1 \u062f\u06cc\u0631 \u062a\u06a9 \u062f\u0648\u0631 \u0631\u06c1\u0646\u06d2 \u06a9\u0648 \u06a9\u06c1\u06c1 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0628\u0627\u0644\u06a9\u0644 \u0627\u0633\u06cc \u0642\u0633\u0645 \u06a9\u0627 \u06a9\u0648\u0622\u067e\u0631\u06cc\u0679\u0648 \u0631\u0648\u06cc\u06c1 \u06c1\u06d2 \u062c\u0633 \u06a9\u06cc \u062d\u0645\u0627\u06cc\u062a \u06a9\u06d2 \u0644\u06cc\u06d2 SSE \u06a9\u06cc \u0648\u0636\u0627\u062d\u062a \u062a\u06cc\u0627\u0631 \u06a9\u06cc \u06af\u0626\u06cc \u062a\u06be\u06cc\u06d4<\/p>\n<p>\u06cc\u06c1 \u062f\u0648\u0646\u0648\u06ba \u0627\u0641\u0639\u0627\u0644 \u0645\u06cc\u06ba \u0679\u0648\u0679 \u06af\u06cc\u0627\u06d4 <code>AbortSignal<\/code> \u062f\u0648\u0628\u0627\u0631\u06c1 \u06a9\u0648\u0634\u0634 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u0644\u0648\u067e \u06a9\u0648 \u06c1\u0645\u06cc\u0634\u06c1 \u0634\u0627\u0631\u0679 \u0633\u0631\u06a9\u0679 \u06a9\u0631\u06cc\u06ba\u06d4 \u062c\u0627\u0646 \u0628\u0648\u062c\u06be \u06a9\u0631 \u0645\u0646\u0633\u0648\u062e\u06cc \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0642\u0627\u0628\u0644 \u06a9\u0648\u0634\u0634 \u0646\u0627\u06a9\u0627\u0645\u06cc\u0648\u06ba \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0633\u0645\u062c\u06be\u0646\u0627 \u0627\u06cc\u06a9 \u0639\u0627\u0645 \u0645\u0633\u0626\u0644\u06c1 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u0633\u06d2 \u0679\u06be\u06cc\u06a9 \u06a9\u0631\u0646\u0627 \u0635\u0631\u0641 \u0627\u06cc\u06a9 \u062a\u0635\u062f\u06cc\u0642 \u06c1\u06d2\u06d4 <code>signal?.aborted<\/code> \u062f\u0648\u0628\u0627\u0631\u06c1 \u06a9\u0648\u0634\u0634 \u06a9\u0631\u0646\u06d2 \u06a9\u0627 \u0641\u06cc\u0635\u0644\u06c1 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2<\/p>\n<h2 id=\"heading-how-to-use-this-with-react\">React \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u0633 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u0633\u06d2 \u06a9\u0631\u06cc\u06ba\u06d4<\/h2>\n<p>\u062f\u0648\u0646\u0648\u06ba \u0641\u0646\u06a9\u0634\u0646\u0632 \u063a\u06cc\u0631 \u0645\u0637\u0627\u0628\u0642\u062a \u067e\u0630\u06cc\u0631 \u062c\u0646\u0631\u06cc\u0679\u0631 \u06c1\u06cc\u06ba\u060c \u0644\u06c1\u0630\u0627 React \u0631\u06cc\u0627\u0633\u062a \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u0646\u0636\u0645\u0627\u0645 \u062a\u06a9\u0631\u0627\u0631 \u0627\u0648\u0631 \u06a9\u0627\u0644\u0646\u06af \u06a9\u0627 \u0645\u0639\u0627\u0645\u0644\u06c1 \u06c1\u06d2\u06d4 <code>setState<\/code> \u0641\u06cc \u062d\u0635\u06c1:<\/p>\n<pre><code class=\"language-typescript\">function ChatComponent() {\n  const [messages, setMessages] = useState(\"\");\n\n  useEffect(() => {\n    const controller = new AbortController();\n\n    (async () => {\n      try {\n        for await (const chunk of stream(\"\/api\/chat\", { signal: controller.signal })) {\n          setMessages((prev) => prev + chunk);\n        }\n      } catch (err: any) {\n        if (err.name !== \"AbortError\") console.error(err);\n      }\n    })();\n\n    return () => controller.abort();\n  }, []);\n\n  return <p>{messages}<\/p>;\n}\n<\/code><\/pre>\n<p>\u06a9\u0644\u06cc\u0646 \u0627\u067e \u0641\u0646\u06a9\u0634\u0646 \u06a9\u0627\u0644 <code>controller.abort()<\/code> \u06cc\u06c1\u0627\u06ba \u062d\u0642\u06cc\u0642\u06cc \u06a9\u0627\u0645 \u06c1\u0648 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4 \u0627\u0633 \u06a9\u06d2 \u0628\u063a\u06cc\u0631\u060c \u0627\u06af\u0631 \u0622\u067e \u0627\u0633\u0679\u0631\u06cc\u0645 \u06a9\u06d2 \u0641\u0639\u0627\u0644 \u06c1\u0648\u0646\u06d2 \u06a9\u06d2 \u062f\u0648\u0631\u0627\u0646 \u06a9\u0633\u06cc \u062c\u0632\u0648 \u0633\u06d2 \u06c1\u0679 \u062c\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u062f\u0631\u0622\u0645\u062f \u067e\u0633 \u0645\u0646\u0638\u0631 \u0645\u06cc\u06ba \u0686\u0644\u06d2 \u06af\u06cc \u0627\u0648\u0631 \u063a\u06cc\u0631 \u0646\u0635\u0628 \u0634\u062f\u06c1 \u062c\u0632\u0648 \u06a9\u06cc \u062d\u0627\u0644\u062a \u06a9\u0648 \u0627\u067e \u0688\u06cc\u0679 \u06a9\u0631 \u062f\u06d2 \u06af\u06cc\u06d4<\/p>\n<h2 id=\"heading-how-to-use-this-with-react-server-components\">\u0631\u06cc \u0627\u06cc\u06a9\u0679 \u0633\u0631\u0648\u0631 \u06a9\u06d2 \u0627\u062c\u0632\u0627\u0621 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u0633\u06d2 \u06a9\u06cc\u0633\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/h2>\n<p>\u0686\u0648\u0646\u06a9\u06c1 \u062c\u0646\u0631\u06cc\u0679\u0631 \u0627\u06cc\u06a9 \u0648\u0642\u062a \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u0627\u06cc\u06a9 \u0642\u062f\u0631 \u067e\u06cc\u062f\u0627 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0633 \u0644\u06cc\u06d2 \u0622\u067e \u0631\u06cc\u06a9\u0633\u0631\u06cc\u0648 \u0633\u0633\u067e\u0646\u0633 \u0628\u0627\u0624\u0646\u0688\u0631\u06cc \u06a9\u0648 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u063a\u06cc\u0631 \u0645\u0637\u0627\u0628\u0642\u062a \u067e\u0630\u06cc\u0631 \u062a\u06a9\u0631\u0627\u0631 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u067e\u0631 \u0628\u06be\u06cc \u0686\u0644\u0627 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba \u062a\u0627\u06a9\u06c1 \u06c1\u0631 \u0627\u06cc\u06a9 \u062d\u0635\u06c1 \u06a9\u06d2 \u0622\u062a\u06d2 \u06c1\u06cc \u06a9\u0644\u0627\u0626\u0646\u0679 \u062a\u06a9 HTML \u06a9\u0648 \u0633\u0679\u0631\u06cc\u0645 \u06a9\u06cc\u0627 \u062c\u0627 \u0633\u06a9\u06d2\u06d4<\/p>\n<pre><code class=\"language-typescript\">async function StreamViewer({ iterator }: { iterator: AsyncIterator<string> }) {\n  const { value, done } = await iterator.next();\n  if (done) return null;\n\n  return (\n    <span>\n      {value}\n      <suspense>\n        <streamviewer iterator=\"{iterator}\"\/>\n      <\/suspense>\n    <\/span>\n  );\n}\n\nexport default function Page() {\n  const dataStream = stream(\"https:\/\/api.example.com\/stream\");\n  const iterator = dataStream[Symbol.asyncIterator]();\n\n  return (\n    <suspense fallback=\"Loading...\">\n      <streamviewer iterator=\"{iterator}\"\/>\n    <\/suspense>\n  );\n}\n<\/string><\/code><\/pre>\n<p>\u06c1\u0631 \u0628\u0627\u0631 \u0628\u0627\u0631 \u0622\u0646\u06d2 \u0648\u0627\u0644\u06cc \u06a9\u0627\u0644 \u0627\u06af\u0644\u06d2 \u062d\u0635\u06d2 \u06a9\u0627 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u062a\u06cc \u06c1\u06d2 \u0627\u0648\u0631 \u0646\u06cc\u0633\u0679\u0688 \u0679\u06a9\u0691\u0648\u06ba \u06a9\u0648 \u067e\u06cc\u0634 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 <code>Suspense<\/code> \u0628\u0627\u0642\u06cc \u06a9\u06cc \u0633\u0631\u062d\u062f. HTML \u06a9\u06d2 \u06c1\u0631 \u0679\u06a9\u0691\u06d2 \u06a9\u0648 \u06a9\u0644\u0627\u0626\u0646\u0679 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0633\u0679\u0631\u06cc\u0645\u0632 \u06a9\u0631\u06cc\u06ba \u062c\u06cc\u0633\u0627 \u06a9\u06c1 \u06cc\u06c1 \u062d\u0644 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u060c \u0628\u062c\u0627\u0626\u06d2 \u06a9\u06c1 \u067e\u0648\u0631\u06d2 \u062c\u0648\u0627\u0628 \u06a9\u0627 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<h2 id=\"heading-conclusion\">\u0646\u062a\u06cc\u062c\u06c1<\/h2>\n<p>\u0627\u06cc\u06a9 \u0642\u0627\u0628\u0644 \u0627\u0639\u062a\u0645\u0627\u062f \u0633\u0679\u0631\u06cc\u0645\u0646\u06af \u06a9\u0644\u0627\u0626\u0646\u0679 \u06a9\u0648 \u06a9\u0627\u0645\u06cc\u0627\u0628\u06cc \u06a9\u06d2 \u0644\u06cc\u06d2 \u0635\u0631\u0641 \u0627\u06cc\u06a9 \u0631\u0627\u0633\u062a\u06d2 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u06c1\u06cc\u0646\u0688\u0644 \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4 \u06a9\u0646\u06a9\u0634\u0646 \u062e\u062a\u0645 \u06c1\u0648 \u06af\u0626\u06d2 \u06c1\u06cc\u06ba\u060c \u0679\u06a9\u0691\u0648\u06ba \u06a9\u0648 \u0644\u0627\u0626\u0646 \u06a9\u06cc \u062d\u062f\u0648\u062f \u0645\u06cc\u06ba \u062a\u0642\u0633\u06cc\u0645 \u06a9\u0631 \u062f\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0645\u0646\u0633\u0648\u062e\u06cc\u0648\u06ba \u06a9\u0648 \u0646\u0627\u06a9\u0627\u0645\u06cc\u0648\u06ba \u0633\u06d2 \u0645\u0645\u062a\u0627\u0632 \u06a9\u06cc\u0627 \u062c\u0627\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4<\/p>\n<p>\u0627\u0633 \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u0627\u06cc\u0633\u06a9 \u06a9\u0627 \u0646\u0642\u0637\u06c1 \u0646\u0638\u0631 \u0627\u0633 \u0686\u06be\u0648\u0679\u06d2 \u0633\u06d2 \u062e\u06cc\u0627\u0644 \u06a9\u06d2 \u06af\u0631\u062f \u0628\u0646\u0627\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2:<\/p>\n<ul>\n<li>\n<p>\u0635\u0627\u0631\u0641\u06cc\u0646 \u06a9\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u0633\u0679\u0631\u06cc\u0645 \u06a9\u0648 \u0627\u06cc\u06a9 \u063a\u06cc\u0631 \u0645\u0637\u0627\u0628\u0642\u062a \u067e\u0630\u06cc\u0631 \u062c\u0646\u0631\u06cc\u0679\u0631 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0638\u0627\u06c1\u0631 \u06a9\u0631\u06cc\u06ba\u06d4 <code>for await...of<\/code><\/p>\n<\/li>\n<li>\n<p>\u06cc\u06c1 SSE \u06a9\u0648 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u0641\u06cc\u0644\u0688 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u067e\u0627\u0631\u0633 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0633\u067e\u06cc\u06a9 \u06a9\u06cc \u062e\u0627\u0644\u06cc \u0644\u0627\u0626\u0646 \u0627\u06cc\u0648\u0646\u0679 \u06a9\u06cc \u062d\u062f\u0648\u062f \u06a9\u0627 \u0627\u062d\u062a\u0631\u0627\u0645 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0627\u0648\u0631 \u062d\u0635\u0648\u06ba \u0645\u06cc\u06ba \u0646\u0627\u0645\u06a9\u0645\u0644 \u0644\u0627\u0626\u0646\u0648\u06ba \u06a9\u0648 \u0628\u0641\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0633\u0691\u06a9 <code>Last-Event-ID<\/code> \u062f\u0648\u0628\u0627\u0631\u06c1 \u0634\u0631\u0648\u0639 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2\u060c \u0622\u067e \u06a9\u0646\u06a9\u0634\u0646 \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0634\u0631\u0648\u0639 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u062f\u0648\u0628\u0627\u0631\u06c1 \u06a9\u0648\u0634\u0634 \u0627\u0648\u0631 \u0645\u0646\u0633\u0648\u062e\u06cc \u06a9\u0648 \u0627\u0644\u06af \u0627\u0644\u06af \u0645\u0633\u0627\u0626\u0644 \u0633\u0645\u062c\u06be\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>React \u0627\u0648\u0631 React \u0633\u0631\u0648\u0631 \u06a9\u06d2 \u0627\u062c\u0632\u0627\u0621 \u06a9\u06d2 \u0644\u06cc\u06d2 \u067e\u062a\u0644\u06cc \u0627\u0646\u0679\u06cc\u06af\u0631\u06cc\u0634\u0646 \u067e\u0648\u0627\u0626\u0646\u0679\u0633 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0628\u0646\u06cc\u0627\u062f\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0641\u0631\u06cc\u0645 \u0648\u0631\u06a9 \u06a9\u0648 \u0627\u062c\u0646\u0627\u0633\u0679\u06a9 \u0631\u06a9\u06be\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<\/ul>\n<p>\u06cc\u06c1 \u0627\u0645\u062a\u0632\u0627\u062c \u0648\u06c1\u06cc \u06c1\u06d2 \u062c\u0648 \u0627\u06cc\u06a9 \u0627\u0633\u0679\u0631\u06cc\u0645\u0646\u06af \u06a9\u0644\u0627\u0626\u0646\u0679 \u06a9\u0648 \u0645\u062e\u062a\u0644\u0641 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062c\u0648 \u0627\u0633\u0679\u0631\u06cc\u0645\u0646\u06af \u06a9\u0644\u0627\u0626\u0646\u0679 \u0633\u06d2 \u0688\u06cc\u0645\u0648 \u0645\u06cc\u06ba \u06a9\u0627\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062c\u0648 \u062d\u0642\u06cc\u0642\u06cc \u062f\u0646\u06cc\u0627 \u06a9\u06d2 \u0646\u06cc\u0679 \u0648\u0631\u06a9 \u06a9\u06d2 \u062d\u0627\u0644\u0627\u062a \u06a9\u0627 \u0645\u0642\u0627\u0628\u0644\u06c1 \u06a9\u0631\u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 \u0622\u067e github.com\/glamboyosa\/ore \u067e\u0631 \u0645\u06a9\u0645\u0644 \u0633\u0648\u0631\u0633 \u06a9\u0648\u0688 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u0688\u06cc\u0679\u0627 \u06a9\u0648 \u0633\u0679\u0631\u06cc\u0645 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06cc \u062e\u0635\u0648\u0635\u06cc\u0627\u062a \u06a9\u06cc \u062a\u0639\u0645\u06cc\u0631 \u06a9\u0631\u062a\u06d2 \u0648\u0642\u062a\u060c \u062c\u06cc\u0633\u06d2 \u06a9\u06c1 AI \u0686\u06cc\u0679 \u06a9\u06d2 \u062c\u0648\u0627\u0628\u0627\u062a \u06cc\u0627 \u0631\u06cc\u0626\u0644 \u0679\u0627\u0626\u0645 \u0646\u0648\u0679\u06cc\u0641\u06a9\u06cc\u0634\u0646 \u0641\u06cc\u0688\u0632\u060c \u0646\u06cc\u0679 \u0648\u0631\u06a9 \u0634\u0627\u0630 \u0648 \u0646\u0627\u062f\u0631 \u06c1\u06cc \u0627\u062a\u0646\u06d2 \u06a9\u0648\u0622\u067e\u0631\u06cc\u0679\u0648 \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba \u062c\u06cc\u0633\u06d2: fetch \u0627\u0633\u06d2 \u0645\u0631\u0626\u06cc \u0628\u0646\u0627\u0626\u06cc\u06ba\u06d4 \u06a9\u0646\u06a9\u0634\u0646 \u0645\u0646\u0642\u0637\u0639 \u06c1\u0648 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u0627\u06cc\u06a9 \u067e\u0631\u0627\u06a9\u0633\u06cc \u0628\u0641\u0631 \u0631\u0633\u067e\u0627\u0646\u0633 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0645\u0648\u0628\u0627\u0626\u0644 \u0646\u06cc\u0679 \u0648\u0631\u06a9 \u0648\u0627\u0626\u06cc \u0641\u0627\u0626\u06cc \u0633\u06d2 \u0633\u06cc\u0644\u0648\u0644\u0631 [&hellip;]<\/p>\n","protected":false},"author":7,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[1],"tags":[],"class_list":["post-25883","post","type-post","status-publish","format-standard","hentry","category-blog"],"_links":{"self":[{"href":"https:\/\/umang.pk\/ur\/wp-json\/wp\/v2\/posts\/25883","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/umang.pk\/ur\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/umang.pk\/ur\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/umang.pk\/ur\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/umang.pk\/ur\/wp-json\/wp\/v2\/comments?post=25883"}],"version-history":[{"count":0,"href":"https:\/\/umang.pk\/ur\/wp-json\/wp\/v2\/posts\/25883\/revisions"}],"wp:attachment":[{"href":"https:\/\/umang.pk\/ur\/wp-json\/wp\/v2\/media?parent=25883"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/umang.pk\/ur\/wp-json\/wp\/v2\/categories?post=25883"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/umang.pk\/ur\/wp-json\/wp\/v2\/tags?post=25883"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}