HTTP/3 و پروتکل‌های استریم دوطرفه (Bidirectional Streams)

http3 bidirectional streams rfc 9114
20 آبان 1403

نسخه‌ی جدید پروتکل HTTP یعنی HTTP/3 بر پایه‌ی پروتکل QUIC توسعه یافته است. QUIC یک پروتکل شبکه است که با هدف بهبود سرعت و عملکرد، نسبت به HTTP/2 عملکرد بهتری دارد. وقتی صحبت از استریم دوطرفه می‌کنیم، یعنی یک کانال ارتباطی داریم که داده‌ها می‌توانند به‌صورت همزمان در هر دو جهت ارسال و دریافت شوند. این نوع ارتباط برای کاربردهایی مثل چت آنلاین، پخش زنده و نرم‌افزارهای وب بلادرنگ (Real-time) بسیار مناسب است.

استفاده از استریم دوطرفه می‌تواند تاخیر در ارسال داده‌ها را کاهش دهد و سبب بشود که برنامه‌ها ارتباطی پایدارتر و سریع‌تر داشته باشند. این به معنای این است که هر زمان که مرورگر یا سرور نیاز به ارسال یا دریافت داده‌ای داشته باشد، این کار را بدون تاخیر یا وقفه انجام خواهد داد.

یک استریم در HTTP/3 یک بخش مستقل از اتصال QUIC است که داده‌ها در آن رد و بدل می‌شوند. هر استریم می‌تواند داده‌هایی ارسال و دریافت کند بدون اینکه لازم باشد یک اتصال جدید راه‌اندازی شود. این امر باعث کاهش فرایندهای زمان‌بر مثل تکمیل تشریفات اتصال می‌شود.

معماری استریم در HTTP/3 بسیار انعطاف‌پذیر است و به ما اجازه می‌دهد تا همزمان با حفظ امنیت و پایداری، با راندمان بیشتری عملیات ارسال و دریافت داده‌ها را انجام دهیم. در این راستا، استریم دوطرفه ابزار مهمی است که به واسطه آن می‌توان کاربردهای متعددی را پیاده‌سازی کرد که نمونه‌هایی از آن‌ها در بالا ذکر شد.

از جمله مزایای پروتکل HTTP/3 و استریم‌های دوطرفه می‌توان به کاهش latency، بهبود عملکرد در شرایط شبکه ناپایدار و کاهش مصرف پهنای باند اشاره کرد.

بیایید نگاهی به یک مثال عملی از نحوه کار با استریم در HTTP/3 داشته باشیم:


client.on('stream', function (stream) {
  stream.write('Hello Server!');
  stream.on('data', function (chunk) {
    console.log('Received from server:', chunk.toString());
  });
});

توضیح خط به خط کد:

client.on('stream', function (stream) {
این خط برای دریافت رویداد استریم جدید روی کلاینت تنظیم شده است.
stream.write('Hello Server!');
این خط پیامی را به سرور ارسال می‌کند با عنوان 'Hello Server!'
stream.on('data', function (chunk) {
با دریافت داده از سرور، این رویداد اجرا می‌شود و اجازه می‌دهد که داده‌های دریافتی پردازش شوند.
console.log('Received from server:', chunk.toString());
پیام دریافتی از سرور را روی کنسول چاپ می‌کند.

سوالات متداول

؟

استفاده از HTTP/3 چه مزایایی دارد؟

؟

چگونه HTTP/3 بر عملکرد وب‌سایت‌ها تاثیر می‌گذارد؟