এইচটিটিপি / 2 কী ওয়েবসকেটগুলি অপ্রচলিত করে?


268

আমি এইচটিটিপি / 2 প্রোটোকল সম্পর্কে শিখছি। এটি ছোট বার্তা ফ্রেম সহ একটি বাইনারি প্রোটোকল। এটি একক টিসিপি সংযোগের মাধ্যমে স্ট্রিম মাল্টিপ্লেক্সিংকে মঞ্জুরি দেয়। ধারণাগতভাবে এটি ওয়েবসকেটের সাথে খুব মিল বলে মনে হচ্ছে।

ওয়েবসকেটগুলি অপ্রচলিত করার এবং তাদের কোনও ধরণের শিরোনামহীন HTTP / 2 অনুরোধ এবং সার্ভার-ইনিশিয়েটেড পুশ বার্তা দিয়ে প্রতিস্থাপন করার পরিকল্পনা রয়েছে? অথবা ওয়েবসকেটগুলি কি এইচটিটিপি / 2 পরিপূরক হবে?


আমি মনে করি যে গৃহীত উত্তর সঠিক, ওয়েব অ্যাপ্লিকেশনগুলির পক্ষে সার্ভারের সাথে দ্বি-দিকনির্দেশে সার্ভার-পুশ করা বার্তা সহ যোগাযোগ করার জন্য ওয়েবসকেটগুলি এখনও পছন্দসই সমাধান। এইচটিটিপি কেবল ব্রাউজারের চেয়ে বেশি ব্যবহৃত হয় এবং যখন ক্লায়েন্ট এবং সার্ভার উভয়ই নিম্ন-স্তরের এপিআই ব্যবহার করতে পারে তখন তাদের ওয়েবসকেটগুলির প্রয়োজন নেই। এখনও বেশিরভাগ লোক ওয়েব অ্যাপ্লিকেশনগুলির জন্য HTTP ব্যবহার করে এবং বেশিরভাগই জাভাস্ক্রিপ্ট-উন্মুক্ত API গুলি সম্পর্কে উদ্বিগ্ন। যদি মডারেটররা মনে করেন যে গৃহীত উত্তরগুলি আলাদা হওয়া উচিত, তবে আমি তার বিরোধিতা করছি না কারণ এই প্রশ্নটি স্পষ্টতই অনেকগুলি মতামত উত্পন্ন করে এবং আমার মতামত ভুল হতে পারে।
vbezhenar

উত্তর:


161

আমি যা বুঝতে পেরেছি তা থেকে HTTP / 2 ওয়েবসকেটের জন্য প্রতিস্থাপন নয়, তবে এসপিডিওয়াই প্রোটোকলকে মানিক করে তোলার লক্ষ্য।

এইচটিটিপি / ২-তে, ব্রাউজার থেকে ক্লায়েন্টের রিসোর্স লোডিং উন্নত করতে দৃশ্যের পিছনে সার্ভার-পুশ ব্যবহার করা হয়। একজন বিকাশকারী হিসাবে আপনার বিকাশের সময় আপনি সত্যই এটি সম্পর্কে চিন্তা করেন না। তবে, ওয়েবসাইটসকেটের সাথে, বিকাশকারীকে এমন এপিআই ব্যবহার করার অনুমতি দেওয়া হয়েছে যা কোনও অনন্য পূর্ণ-দ্বৈত সংযোগের মাধ্যমে বার্তা গ্রাস করতে এবং ধাক্কা দিতে সক্ষম।

এগুলি একই জিনিস নয় এবং তাদের একে অপরের পরিপূরক হওয়া উচিত।


3
আপনার উত্তরের জন্য গিলিয়াম ধন্যবাদ। তবে আমি ভাবছি যে আপনি (বা কেউ) এইচটিটিপি / 2 নির্দিষ্টকরণ থেকে কিছু রেফারেন্স যুক্ত করতে পারেন কিনা। আমি ব্লগগুলি থেকে আরও কী পড়েছি এবং এইচটিটিপি / ২ এর সাথে একটি সত্য দ্বি-নির্দেশমূলক যোগাযোগ রয়েছে?
মার্টিন মিজার

3
নিশ্চিত না যে এইচটিটিপি / 2 স্পিকটি এইচটিটিপি / 2 এর উত্স এবং এটি কীভাবে ওয়েবকেট থেকে আলাদা তার বিশদ দেওয়ার জন্য সঠিক জায়গা। তবে, আপনি সহজেই দেখতে পাচ্ছেন যে HTTP / 2 এর মাধ্যমে আমরা একটি দ্বিপাক্ষিক যোগাযোগ ব্যবহার করছি: goo.gl/IJVxWS (পৃষ্ঠা 6 এবং 13)
ডি

27
HTTP / 2 আসলে দ্বি নির্দেশমূলক তবে প্রতিসম নয়, যার অর্থ শুধুমাত্র ক্লায়েন্ট একটি উপযুক্ত অনুরোধ পাঠাতে পারে এবং সার্ভার প্রতিক্রিয়াগুলি এবং অনুরোধের প্রতিশ্রুতি পাঠাতে পারে (ধাক্কা)। এটি ওয়েবককেটগুলি এই অর্থে পৃথক করে তোলে যে উভয় পক্ষই তাদের পাঠাতে / গ্রহণের জন্য অনুমতিপ্রাপ্ত মর্যাদায় আরও "সমান"।
জর্জ আন্তনিয়াদিস

3
এইচটিটিপি 2 এর উত্স সম্পর্কে আইইইইর সফটওয়্যার ইঞ্জিনিয়ারিং রেডিওতে একটি দুর্দান্ত পডকাস্ট রয়েছে। আমি মনে করি এটি হ'ল: se-radio.net/2015/07/es Ep
ম্যাক্স মারফি

2
পূর্ণ যৌক্তিক যুক্ত অনুরূপ উত্তরটি এখানে এই ইনকিউকিউ নিবন্ধে পাওয়া যাবে: infoq.com/articles/websocket-and-http2-coexist
ম্যান্ট্রিড

151

এইচটিটিপি / 2 টিপ সবেমাত্র পড়া শেষ করার পরে , আমি মনে করি যে HTTP / 2 বেশিরভাগ ব্যবহারের ক্ষেত্রে অপ্রচলিত ওয়েবসকেটগুলি করে, তবে সম্ভবত সমস্ত কিছু নয়।

PUSH_PROMISE(কথোপকথন সার্ভার পুশ হিসাবে পরিচিত) এখানে সমস্যা নয়। এটি কেবল একটি পারফরম্যান্স অপ্টিমাইজেশন।

ব্রাউজারে ওয়েবসাইটসকেটের জন্য প্রধান ব্যবহারের ক্ষেত্রে হ'ল ডেটা দ্বি নির্দেশমূলক স্ট্রিমিং সক্ষম করা। সুতরাং, আমি মনে করি যে ওপি-র প্রশ্নটি এইচটিটিপি / ২ ব্রাউজারে দ্বি নির্দেশমূলক স্ট্রিমিং সক্ষম করার জন্য আরও ভাল কাজ করে কিনা এবং আমি মনে করি যে হ্যাঁ, এটি হয়েছে does

প্রথম সব, এটি হয় দ্বি-দ্বি। কেবলমাত্র স্ট্রিম বিভাগের ভূমিকা পড়ুন :

একটি "স্ট্রিম" কোনও HTTP / 2 সংযোগের মধ্যে ক্লায়েন্ট এবং সার্ভারের মধ্যে বিনিময় করা ফ্রেমের একটি স্বতন্ত্র, দ্বি নির্দেশমূলক অনুক্রম ire স্ট্রিমগুলির কয়েকটি গুরুত্বপূর্ণ বৈশিষ্ট্য রয়েছে:

একটি একক এইচটিটিপি / 2 সংযোগে একাধিক স্ট্রিম থেকে অন্তঃসত্ত্বা ফ্রেমগুলি অন্তর্ভুক্ত করে একসাথে একযোগে খোলা স্ট্রিম থাকতে পারে।

স্ট্রিমগুলি ক্লায়েন্ট বা সার্ভারের দ্বারা প্রতিষ্ঠিত ও একতরফাভাবে ব্যবহার করা বা ভাগ করা যায়।

স্ট্রিমগুলি শেষ প্রান্তে বন্ধ হয়ে যেতে পারে can

এই জাতীয় নিবন্ধগুলি (অন্য উত্তরে লিঙ্কিত) এইচটিটিপি / 2 এর এই দিকটি সম্পর্কে ভুল। তারা বলে বিড়ি নয়। দেখুন, একটি জিনিস যা HTTP / 2 এর সাথে ঘটতে পারে না: সংযোগটি খোলার পরে, সার্ভারটি একটি নিয়মিত স্ট্রিম শুরু করতে পারে না, কেবল একটি ধাক্কা স্ট্রিম। তবে একবার ক্লায়েন্ট কোনও অনুরোধ প্রেরণ করে একটি স্ট্রিমটি খুললে, উভয় পক্ষই স্থির সকেটের মাধ্যমে যে কোনও সময় - সম্পূর্ণ বিডিতে ডেটা ফ্রেমগুলি প্রেরণ করতে পারে।

এটি ওয়েবসকেট থেকে খুব বেশি আলাদা নয়: সার্ভারটিও ডেটা পাঠাতে পারার আগে ক্লায়েন্টকে একটি ওয়েবসকেট আপগ্রেড অনুরোধ শুরু করতে হবে।

সবচেয়ে বড় পার্থক্যটি হ'ল ওয়েবসকেটগুলির বিপরীতে, এইচটিটিপি / 2 তার নিজস্ব মাল্টিপ্লেক্সিং শব্দার্থবিজ্ঞানের সংজ্ঞা দেয়: কীভাবে স্ট্রিমগুলি শনাক্তকারী হয় এবং ফ্রেমগুলি কীভাবে স্ট্রিমের আইডি বহন করে তা বহন করে। এইচটিটিপি / ২ প্রবাহকে অগ্রাধিকার দেওয়ার জন্য প্রবাহ নিয়ন্ত্রণ শব্দার্থবিদ্যাও সংজ্ঞায়িত করে। বিডির বেশিরভাগ বাস্তব-জগত অ্যাপ্লিকেশনগুলিতে এটি গুরুত্বপূর্ণ।

(এই ভুল নিবন্ধটি আরও বলেছে যে ওয়েবসাইটসকেট স্ট্যান্ডার্ডে মাল্টিপ্লেক্সিং রয়েছে No না এটি নেই that এটি খুঁজে পাওয়া সত্যিই কঠিন নয়, কেবল ওয়েবসাইটসকেট আরএফসি 6455 খুলুন এবং ⌘-এফ টিপুন এবং "মাল্টিপ্লেক্স" টাইপ করুন you আপনি পড়ার পরে

প্রোটোকল এক্সটেনসিবল করার উদ্দেশ্যে; ভবিষ্যতের সংস্করণগুলি সম্ভবত মাল্টিপ্লেক্সিংয়ের মতো অতিরিক্ত ধারণাগুলি প্রবর্তন করবে।

আপনি দেখতে পাবেন যে ওয়েবসাইটসকেট মাল্টিপ্লেক্সিংয়ের জন্য 2013 খসড়া সম্প্রসারণ রয়েছে । তবে আমি জানি না কোন ব্রাউজারগুলি, যদি থাকে তবে সেটিকে সমর্থন করে। আমি সেই এক্সটেনশনের পিছনে আমার এসপিএ ওয়েব অ্যাপ তৈরির চেষ্টা করব না, বিশেষত এইচটিটিপি / 2 আসার সাথে সাথে, সমর্থনটি কখনই আসতে পারে না)।

মাল্টিপ্লেক্সিং হ'ল এক ধরণের জিনিস যা সাধারণত আপনি নিজেকে বিডির জন্য একটি ওয়েবসকেট খুললে বলবেন, একক পৃষ্ঠার অ্যাপ্লিকেশনটি কার্যকরভাবে আপডেট করার জন্য বলুন। আমি HTTP / 2 স্পেসে খুশি, একবার এবং সকলের যত্ন নেওয়া।

আপনি যদি HTTP / 2 কী করতে পারেন তা জানতে চান, কেবল জিআরপিসি দেখুন। জিআরপিসি এইচটিটিপি / ২ জুড়ে প্রয়োগ করা হয়। অর্ধ এবং পূর্ণ দ্বৈত স্ট্রিমিং বিকল্পগুলি দেখুন যা জিআরপিসি অফার করে। (দ্রষ্টব্য যে জিআরপিসি বর্তমানে ব্রাউজারগুলিতে কাজ করে না, তবে এটি আসলে কারণ ব্রাউজারগুলি (1) ক্লায়েন্ট জাভাস্ক্রিপ্টে HTTP / 2 ফ্রেমটি প্রকাশ করে না এবং (2) সাধারণত ট্রেলারগুলি সমর্থন করে না যা এতে ব্যবহৃত হয় জিআরপিসি স্পেস।)

ওয়েবসকেটের এখনও কোথায় জায়গা থাকতে পারে? বড়টি হ'ল সার্ভার-> ব্রাউজারটি বাইনারি ডেটা পুশ করে। এইচটিটিপি / 2 সার্ভার-> ব্রাউজারটিকে বাইনারি ডেটা ধাক্কা দেয় তবে এটি ব্রাউজার জেএস-এ প্রকাশিত হয় না। অডিও এবং ভিডিও ফ্রেমগুলিকে পুশ করার মতো অ্যাপ্লিকেশনগুলির জন্য, এটি ওয়েবসকেটগুলি ব্যবহার করার একটি কারণ।

সম্পাদনা করুন: 172020 জানুয়ারী

সময়ের সাথে সাথে এই উত্তরটি ধীরে ধীরে শীর্ষে উঠে গেছে (যা ভাল, কারণ এই উত্তরটি কম-বেশি সঠিক)। তবে এখনও মাঝে মাঝে মন্তব্য রয়েছে যে এটি বিভিন্ন কারণে সঠিক নয়, সাধারণত PUSH_PROMISEকোনও একক অ্যাপ্লিকেশনটিতে মেসেজ-ওরিয়েন্টেড সার্ভার -> ক্লায়েন্ট পুশ সম্পর্কে কীভাবে বিভ্রান্তির সাথে সম্পর্কিত তা সম্পর্কিত । এবং, ব্রাউজারে ওয়েবসকেটের জন্য ব্যবহারের কেস রয়েছে যা সার্ভার-পুশড বাইনারি ডেটা। জেএসএন সহ পাঠ্যগত তথ্যের জন্য, ওয়েবসকেট ব্যবহার করবেন না, এসএসই ব্যবহার করুন।

পুনরুদ্ধার করতে: HTTP / 2 প্রোটোকল পূর্ণ দ্বি-di। তবে আধুনিক ওয়েব ব্রাউজারগুলি জাভাস্ক্রিপ্টে ফ্রেম-ভিত্তিক HTTP / 2 প্রোটোকল প্রকাশ করে না । নিঃসন্দেহে, আপনি যদি এইচটিটিপি / ২ সংযোগের মাধ্যমে একই উত্সের জন্য একাধিক অনুরোধ করেন তবে হুডের নীচে সেই সমস্ত ট্র্যাফিকই একটি সংযোগে মাল্টিপ্লেক্স হয়ে যায় (এবং এটিই আমরা যত্ন করি!)!

সুতরাং আপনার যদি একটি রিয়েল-টাইম চ্যাট অ্যাপ্লিকেশন তৈরি করার প্রয়োজন হয় তবে আসুন আমরা বলি যে যেখানে আপনাকে চ্যাট রুমের সমস্ত ক্লায়েন্টের সাথে নতুন চ্যাট বার্তাগুলির ব্রডকাস্ট করতে হবে যেখানে মুক্ত সংযোগ রয়েছে, আপনি ওয়েবকোকেট ছাড়াই এটি করতে পারেন (এবং সম্ভবত হওয়া উচিত)।

আপনি বার্তাটি নিচে রাখতে সার্ভার-প্রেরিত ইভেন্টগুলি এবং অনুরোধগুলি প্রেরণের জন্য এপিআই আনুনসার্ভার-প্রেরিত ইভেন্টস (এসএসই) একটি স্বল্প-পরিচিত তবে সুপরিচিত সমর্থিত এপিআই যা কোনও বার্তা-ওরিয়েন্টেড সার্ভার-থেকে-ক্লায়েন্ট স্ট্রিম প্রকাশ করে। যদিও এটি ক্লায়েন্ট জাভাস্ক্রিপ্টের মতো লাগে না, আপনার হুডের নীচে আপনার ব্রাউজারটি (যদি এটি HTTP / 2 সমর্থন করে) এই সমস্ত বার্তাকে একাধিকবার একক টিসিপি সংযোগটি পুনরায় ব্যবহার করবে। দক্ষতার কোনও ক্ষতি নেই এবং প্রকৃতপক্ষে এটি ওয়েবসকেটগুলির চেয়ে লাভ। একাধিক স্ট্রিম দরকার? একাধিক ইভেন্টসোর্স খুলুন! এগুলি আপনার জন্য স্বয়ংক্রিয়ভাবে মাল্টিপ্লেক্স হবে।

ওয়েবসকেট হ্যান্ডশেকের চেয়ে বেশি রিসোর্স দক্ষ এবং কম প্রাথমিক অলসতা থাকা ছাড়াও, সার্ভার-প্রেরিত ইভেন্টগুলিতে এমন দুর্দান্ত সম্পত্তি রয়েছে যা তারা স্বয়ংক্রিয়ভাবে পিছনে পড়ে এবং এইচটিটিপি / ১.১ এ কাজ করে। তবে আপনার যখন কোনও HTTP / 2 সংযোগ রয়েছে তারা অবিশ্বাস্যভাবে ভাল কাজ করে well

প্রতিক্রিয়াশীলভাবে আপডেট হওয়া এসপিএটি সম্পাদন করার বাস্তব-বিশ্বের উদাহরণ সহ একটি ভাল নিবন্ধ এখানে ।


21
এই উত্তর স্বীকৃত উত্তর সহ অন্যগুলির সাথে আংশিকভাবে একমত নয় এবং এটিও সেরা উত্তর কারণ এটি সরাসরি উত্সের ভিত্তিতে।
sudo

7
আমি এই উত্তর এবং মন্তব্য সাথে সম্পূর্ণরূপে একমত। এইচটিটিপি / 2 দ্বি-নির্দেশমূলক স্ট্রিমবাসযুক্ত।
মার্টিন মিজার

3
সত্যিকারের সঠিক উত্তর, লোকটি উত্সগুলি এবং বাস্তব বিশ্বের অ্যাপ্লিকেশন (জিআরপিসি) যাচাই করতে বিরক্ত করেছিল
ভ্লাদিমির আকোপিয়ান

1
ওয়েবসকেটগুলিতে, ক্লায়েন্ট একটি ওয়েবসকেট আপগ্রেড অনুরোধ শুরু না করা পর্যন্ত সার্ভার স্বেচ্ছাচারিত বাইটগুলি ধাক্কা দেওয়া শুরু করতে পারে না, তবে এটি যে কোনও সময় ধাক্কা দিতে পারে। এইচটিটিপি / ২-তে, ক্লায়েন্ট কোনও ডেটা সংযোগ শুরু না করা পর্যন্ত সার্ভারটি বাইটগুলি ঠেলাঠেলি শুরু করতে পারে না, তবে তারপরে এটি কোনও সময়ে বাইটগুলি ঠেলাতে পারে। কার্যকরী পার্থক্য কি? আমি যেমন উল্লেখ করেছি, PUSH_PROMISE সামর্থ্য একটি লাল রঙের হারিং। ওয়েব সকেটের পরিবর্তে এইচটিটিপি / 2 হ'ল কারণ নয়। এটি কেবল সামান্য পারফরম্যান্স অপটিমাইজেশন off বিডি স্ট্রিমিং এটি এইচটিটিপি / 2 এর হৃদয়ের সাথে কিছুই করার নেই।
মাস্টঙ্ক

1
এই উত্তরটি কেবল ভুল। এটি এতগুলি দিককে বিভ্রান্ত করে যে এটি সহজেই বিভ্রান্ত হয়। যাইহোক, বিষয়টির ক্রুশটি হ'ল "বিডি" এইচটিটিপি / 2 স্ট্রিমগুলি রিকোয়েস্ট-রেসপন্স চালিত (এবং সংখ্যায় সীমাবদ্ধ), যেখানে ওয়েবসকেটস প্রোটোকল সত্যিকারের বার্তা ভিত্তিক বিড়ি প্রোটোকল (এটি অনুরোধ-প্রতিক্রিয়া ভিত্তিক নয়, হ্যান্ডশেক পর্ব ব্যতীত)। এটি একটি বিশাল পার্থক্য যা কেবলমাত্র স্পেসিফিকেশনটি ভুলভাবে পড়া দ্বারা ব্রিজ করা যায় না (যেমন @ ম্যাস্ক অজান্তেই সম্পন্ন হয়েছে বলে মনে হয়)।
মাইস্ট

64

আমি বলি নয় (ওয়েবসাইটসকেটগুলি অপ্রচলিত নয় )।

প্রথম এবং বেশিরভাগ ক্ষেত্রে উপেক্ষা করা সমস্যাটি হ'ল এইচটিটিপি / ২ পুশ প্রয়োগযোগ্য নয় এবং প্রক্সি, রাউটার, অন্যান্য মধ্যস্থতাকারী বা এমনকি ব্রাউজার দ্বারা উপেক্ষা করা যেতে পারে

যেমন (HTTP2 খসড়া থেকে):

কোনও মধ্যস্থতাকারী সার্ভার থেকে পুশগুলি গ্রহণ করতে পারে এবং ক্লায়েন্টের কাছে সেগুলি ফরোয়ার্ড না করা বেছে নিতে পারে । অন্য কথায়, কীভাবে পুশ করা তথ্য ব্যবহার করবেন তা সেই মধ্যস্থতাকারীর উপর নির্ভর করে। একইভাবে, মধ্যস্থতাকারী সার্ভার কর্তৃক গৃহীত কোনও পদক্ষেপ ছাড়াই ক্লায়েন্টকে অতিরিক্ত ধাক্কা দিতে বেছে নিতে পারে।

সুতরাং, এইচটিটিপি / 2 পুশ ওয়েবসকেটগুলি প্রতিস্থাপন করতে পারে না।

এছাড়াও, এইচটিটিপি / 2 সংযোগগুলি কিছু সময়ের পরে বন্ধ হয়ে যায়।

এটি সত্য যে মানকটি বলে যে:

এইচটিটিপি / 2 সংযোগ স্থির থাকে। সর্বোত্তম পারফরম্যান্সের জন্য, আশা করা হচ্ছে যে ক্লায়েন্টরা সংযোগগুলি বন্ধ না করবে যতক্ষণ না এটি নির্ধারিত হয় যে কোনও সার্ভারের সাথে আর কোনও যোগাযোগের প্রয়োজন নেই (উদাহরণস্বরূপ, যখন কোনও ব্যবহারকারী কোনও নির্দিষ্ট ওয়েব পৃষ্ঠা থেকে সরে যান) বা সার্ভারটি সংযোগ বন্ধ না করা পর্যন্ত।

কিন্তু ...

যতক্ষণ সম্ভব সার্ভারগুলি ওপেন সংযোগ বজায় রাখতে উত্সাহিত করা হয় তবে প্রয়োজনে নিষ্ক্রিয় সংযোগ বন্ধ করার অনুমতি দেওয়া হয় । উভয়ই যখন ট্রান্সপোর্ট-লেয়ার টিসিপি সংযোগ বন্ধ করতে বেছে নেয়, সমাপ্তি সমাপ্তিটি প্রথমে একটি গোয়ায় (বিভাগ 6.8) ফ্রেম প্রেরণ করা উচিত যাতে উভয় প্রান্তই পূর্ববর্তী প্রেরিত ফ্রেমগুলি প্রক্রিয়াজাত করা হয়েছে এবং কোনও প্রয়োজনীয় বাকী কাজ নিষ্ঠার সাথে সম্পন্ন বা বন্ধ করতে পারে তা নির্ধারণ করতে পারে।

এমনকি যদি একই সংযোগটি সামগ্রী খোলা থাকাকালীন ধাক্কা দেওয়ার অনুমতি দেয় এবং এইচটিটিপি / ২ যদি এইচটিটিপি / ১.১ এর 'চালিয়ে রাখুন' দ্বারা প্রবর্তিত কিছু পারফরম্যান্স সমস্যার সমাধান করে ... এইচটিটিপি / ২ সংযোগগুলি অনির্দিষ্টকালের জন্য খোলা থাকে না ।

বা কোনও ওয়েবপৃষ্ঠা একবার বন্ধ হয়ে গেলে কোনও HTTP / 2 সংযোগ পুনরায় আরম্ভ করতে পারে না (যদি না আমরা দীর্ঘ-টানতে ফিরে আসি, তবে তা)।

সম্পাদনা (দুই বছর পরে, 2017)

HTTP / 2 এর প্রয়োগগুলি দেখায় যে একাধিক ব্রাউজার ট্যাব / উইন্ডোগুলি একটি একক এইচটিটিপি / 2 সংযোগ ভাগ করে দেয়, এর অর্থ এটি pushকখনই জানতে পারবেন না যে এটি কোন ট্যাব / উইন্ডোটির সাথে সম্পর্কিত, pushওয়েবসকেটের প্রতিস্থাপন হিসাবে ব্যবহারকে বাদ দিয়ে ।

সম্পাদনা (2020)

আমি নিশ্চিত নই কেন লোকেরা উত্তরটি নিম্নচাপ দেওয়া শুরু করেছিল। যদি কিছু হয় তবে উত্তরটি পোস্ট করার পরে যে বছরগুলি শুরু হয়েছিল তা প্রমাণ করে যে এইচটিটিপি / 2 ওয়েবস্কোকেটগুলি প্রতিস্থাপন করতে পারে না এবং এটি করার জন্য ডিজাইন করা হয়নি।

মঞ্জুর, HTTP / 2 ওয়েবস্কট সংযোগগুলি টানেল করার জন্য ব্যবহৃত হতে পারে তবে এই টানেলযুক্ত সংযোগগুলির জন্য এখনও ওয়েবস্কট প্রোটোকলের প্রয়োজন হবে এবং তারা এইচটিটিপি / 2 ধারকটির আচরণের পদ্ধতিতে প্রভাব ফেলবে।


4
ডাব্লুএস সকেটগুলি চিরকাল খোলা থাকবে না। পার্থক্যগুলি স্ট্রিমগুলি; HTTP / 2 আপনাকে একাধিক স্ট্রিম প্রবাহ সরবরাহ করে যার অর্থ সার্ভারে ফ্লো নিয়ন্ত্রণ খুব আলাদা এবং প্রায়শই লকলেস থাকে। ডাব্লুএস (একটি প্রোটোকল হিসাবে) অনিয়ন্ত্রিত ইনবাউন্ড প্রসেসিং থাকতে হবে। ফ্লো নিয়ন্ত্রণ স্ট্যাকের উচ্চতর প্রয়োগ করা হয়। সুরক্ষা এবং সার্ভার অখণ্ডতার জন্য, HTS / 2 ডাব্লুএস এর চেয়ে অনেক ভাল।
বন্ড

3
@ বন্ড, আমি সম্মত হই যে পরিবহন স্তর হিসাবে HTTP / 2 এর অনেক সুবিধা রয়েছে (বহু ব্রাউজারের ট্যাবগুলিতে একটি সংযোগ ভাগ করা কেবল একটি উদাহরণ)। তবে এটি যোগাযোগ স্তর হিসাবে নকশা করা হয়নি । এটি একটি কার্যকরী প্রশ্ন। উভয় প্রোটোকলই বিভিন্ন প্রয়োজনের উত্তর দেয়। যেমন sshব্রাউজারে টার্মিনাল বাস্তবায়ন করা ওয়েবসকেটগুলি ব্যবহার করার সময় একটি হাওয়া। এটি HTTP / 2 এ মোট মাথা ব্যাথা হবে, বিশেষত যদি আরও একটি ট্যাব খোলা থাকে। এছাড়াও, যদি ব্রাউজারটি (বা HTTP / 2 প্রক্সিগুলির মধ্যে একটি) সংযোগটি বন্ধ করে দেয়? ক্লায়েন্ট কি কেবল নতুন কোনও ডেটা উপলব্ধ নেই তা ধরে নিতে পারেন? আমরা ভোটগ্রহণে ফিরে এসেছি।
Myst

1
ব্রাউজারটি কেবল আপনার ডাব্লুএস সংযোগটি সহজেই বন্ধ করতে পারে। যে কোনও ধরণের নেটওয়ার্কিং সহ জীবন। সত্যি কথা বলতে কি HTTP / 2 এ মাল্টিপ্লেক্সিং ওভারকিল। প্রোটোকলটির সত্যই এটির প্রয়োজন ছিল না। একাধিক স্ট্রিম খোলার সাথে সাথে আপনি টিসিপি বাফারগুলিকে থ্রুপুট সীমিত করে নিয়ে সমস্যা শুরু করছেন। আমি আপনার সাথে একমত যে ডাব্লুএস এটিপিটি এইচটিটিপি / ২ এর চেয়ে বেশি যা কিছু করে তার মধ্যে আরও ভাল। মূলত, ডাব্লুএস এমন একটি জিনিস যা ব্যবহারকারীদের খারাপ কাজগুলি থেকে বিরত রাখতে অনেক উচ্চ স্তরের নিয়ন্ত্রণের প্রয়োজন হয়।
বন্ড

2
আঙ্কেল বেন (স্পাইডার ম্যান) এর উদ্ধৃতি দিতে: "মনে রাখবেন, দুর্দান্ত শক্তির সাথে মহান দায়িত্ব আসে"। হ্যাঁ, @ বন্ড, আপনি খুব ঠিক বলেছেন। ওয়েবসকেটগুলি খুব "কাঁচা" প্রোটোকল হওয়ায় আরও একটি দায়িত্বশীল সার্ভার ডিজাইন প্রয়োজন। এবং হ্যাঁ, ডাব্লুএসটি এইচটিটিপি / 2 এর মতো সহজেই বন্ধ করা যেতে পারে তবে ডাব্লুএস oncloseকলব্যাক সমর্থন করে , সুতরাং কোনও ভোটগ্রহণের প্রয়োজন নেই। মাল্টিপ্লেক্সিংয়ের ক্ষেত্রে, আমি মনে করি এটি একটি প্রয়োজনীয়তার চেয়ে বরং পছন্দ ছিল। keep-aliveব্যর্থ হয়েছে এবং "ফার্স্ট-ইন-লাইন" পারফরম্যান্স হিট এড়ানোর একমাত্র উপায় ছিল মাল্টিপ্লেক্সিং ঝুঁকিপূর্ণ। সময় বলবে :)
Myst

1
সার্ভার ডিজাইনের দিক থেকে আউটবাউন্ড মাল্টিপ্লেক্সিং একটি জটিল এবং ব্যয়বহুল সমস্যা। এটি অভ্যন্তরীণভাবে পোল করানোর জন্য আইও মেকানিক্সের প্রয়োজন যা নরকের মতো ব্যয়বহুল। আপনি যদি বড় দস্তাবেজগুলি স্ট্রিম না করেন তবে মাল্টিপ্লেক্সিং এমনকি কার্যকর হবে না কারণ দ্বিতীয়টি উপলভ্য হওয়ার আগে এবং অনুরোধটি সম্ভবত অভ্যন্তরীণভাবে পুরোপুরি বাফার করবে এবং মাল্টিপ্লেক্সিং চালাতে ব্যর্থ হবে। আরটিএমপি এর বহির্মুখী মাল্টিপ্লেক্সিং রয়েছে তবে কেবল অ্যাডোবের সার্ভার এটি করে। আরটিএমপি-র কাছে এইচটিটিপি / 2 কতটা কাছাকাছি তা অবাক করা।
বন্ড করুন

39

উত্তর না হয়। দুজনের মধ্যে লক্ষ্যটি খুব আলাদা। এমনকি HTTP / 2- র উপরে ওয়েবসকেটের জন্য একটি আরএফসি রয়েছে যা আপনাকে একক HTTP / 2 টিসিপি পাইপ দিয়ে একাধিক ওয়েবস্কট সংযোগ তৈরি করতে দেয়।

নতুন সংযোগ খোলার সময় কমিয়ে এবং আরও সকেট, নরম আইআরকিউ এবং বাফারগুলির ব্যয় ব্যতীত আরও যোগাযোগের চ্যানেলগুলির অনুমতি দেওয়ার মাধ্যমে এইচটিটিপি / 2 এর ওপরে ডাব্লুএস একটি সংস্থান সংরক্ষণের খেলা হবে।

https://tools.ietf.org/html/draft-hirano-httpbis-websocket-over-http2-01


এটা আশ্চর্যজনক! জাভাস্ক্রিপ্ট ক্লায়েন্টের কোনও প্রকাশ্য উদাহরণ রয়েছে যা এটি প্রয়োগ করেছে? আমি কোন উদাহরণ খুঁজে পাচ্ছি না। আমার কী করা দরকার? এটি কি ভাল সম্পদ?undertow.io/blog/2015/04/27/An-in-depth-overview-of-HTTP2.html
RaisinBranCrunch

উপরের দাবির কোনও উত্স কি কেউ জানেন) ১) শিরোনামটির দৈর্ঘ্য সন্ধান করা, ২) মাঠের নামগুলি কম আচ্ছাদন করা?
পিম হাইজডেন

@ পিএমহিজডেন এইচটিটিপি / 1.x এ শিরোনামের দৈর্ঘ্য সনাক্ত করতে 4 বাইট শেষ প্রান্তে চিহ্নিত সমস্ত বাইটের মধ্য দিয়ে লুপিং প্রয়োজন। এটা খুব ব্যয়বহুল। ক্ষেত্রের নামের ক্ষেত্রে-অ-সংবিধানের অর্থ হ'ল যে কোনও ক্ষেত্রের মিলটি অক্ষরের উপরের এবং নিম্নতর উভয় সংস্করণের জন্যই করা উচিত। এটির জন্য পুরো অক্ষরটি চেকগুলির জন্য উচ্চ এবং নিম্ন কেস সম্পর্কে জ্ঞান প্রয়োজন knowledge ২.x এ আপনি ধরে নিতে পারেন যে এগুলি লোয়ার কেস।
বন্ড

@ রাইসিনব্রানক্রাঞ্চ আপনি জাভাস্ক্রিপ্ট থেকে এর কোনওটিই নিয়ন্ত্রণ করতে পারবেন না। ব্রাউজারটি আপনার জন্য সমস্ত কিছু করে।
20:25

@ বন্ড আমি বর্তমানে এনগিনেক্সের সাথে এইচটিটিপি / ২ এবং সকেট সার্ভারে ওয়েবসকেট সংযোগগুলি প্রেরণ করার জন্য প্রক্সি_পাস ব্যবহার করছি, তবে আমার যদি একক ব্যবহারকারীর ওয়েবসাইটে একাধিক ট্যাব খোলা থাকে, সকেট সার্ভার এটিকে একাধিক সংযোগ হিসাবে বিবেচনা করে। আমি ধরে নেব যে এইচটিটিপি / 2 যদি কোনও টিসিপি পাইপের সাথে একাধিক সংযোগ স্থাপন করে তবে সার্ভার এটিকে একটি সংযোগ হিসাবে বিবেচনা করবে। এটা কি ভুল? সার্ভার অতিরিক্ত অপ্রয়োজনীয় সংযোগ তৈরি করছে না তা যাচাই করার কোনও উপায় আছে?
রাইসিনব্রানক্রাঞ্চ

23

ঠিক আছে, এই তথ্যপ্রযুক্তি নিবন্ধ থেকে উদ্ধৃত :

ঠিক আছে, একটি সাধারণ কারণে উত্তরটি পরিষ্কারভাবে নেই, যেমনটি আমরা উপরে দেখেছি, HTTP / 2 সার্ভার পুশের সাথে পরিচয় করিয়ে দেয় যা সার্ভারটিকে ক্লায়েন্ট ক্যাশে সক্রিয়ভাবে সংস্থানগুলি প্রেরণে সক্ষম করে। এটি ক্লায়েন্ট অ্যাপ্লিকেশন নিজেই ডেটা নিচে ঠেকানোর অনুমতি দেয় না। সার্ভার পুশগুলি কেবল ব্রাউজার দ্বারা প্রক্রিয়াজাত হয় এবং অ্যাপ্লিকেশন কোডটিতে পপ আপ হয় না, অর্থাত এই ইভেন্টগুলির জন্য বিজ্ঞপ্তি পাওয়ার জন্য অ্যাপ্লিকেশনটির জন্য কোনও API নেই।

এবং তাই HTTP2 পুশটি আপনার ব্রাউজার এবং সার্ভারের মধ্যে সত্যিই কিছু, যখন ওয়েবসাইটসকেটগুলি সত্যিকারের ডেটা স্থানান্তরের জন্য ক্লায়েন্ট (জাভাস্ক্রিপ্ট, যদি এটি ব্রাউজারে চলছে) এবং অ্যাপ্লিকেশন কোড (সার্ভারে চলমান) উভয়ই ব্যবহার করতে পারে তবে সত্যই প্রকাশিত হয়।


5

বার্তা বিনিময় এবং সাধারণ স্ট্রিমিং (অডিও, ভিডিও স্ট্রিমিং নয়) এইচটিটিপি / 2 মাল্টিপ্লেক্সিং এবং ওয়েবসকেট উভয়ের মাধ্যমেই করা যেতে পারে। সুতরাং কিছু ওভারল্যাপ রয়েছে, তবে ওয়েবসকেটগুলিতে প্রোটোকল, প্রচুর ফ্রেমওয়ার্ক / এপিআই এবং কম হেডারের ওভারহেড রয়েছে। এখানে বিষয় সম্পর্কে সুন্দর নিবন্ধ


2

এইচটিটিপি / 2 তে ওয়েবস্কট বাস্তবায়ন হবে। https://tools.ietf.org/html/rfc8441


নেই সেখানে ... ওয়েবস্কট সংযোগটি HTTP / 2 এর মাধ্যমে টুনেল করা হবে তবে HTTP / 2 প্রোটোকল প্রতিস্থাপন করবে না, এটি অপ্রচলিত হবে না।
মাইস্ট

@ মিস্ট আমি কি বলেছি?
ডিজিটারস

2
নাহ, আপনি তা বলেন নি, আমি করেছি। আপনি লিখেছেন যে HTTP / 2 তে একটি ওয়েবস্কুট বাস্তবায়ন হবে, যা আইএমএইচও খুব সংক্ষিপ্ত এবং কিছুটা গুরুত্বপূর্ণ বিবরণ বাদ দেওয়ার কারণে কিছুটা বিভ্রান্তিকর বলে মনে হয়েছিল।
মাইস্ট

2

২০২০ সালের এপ্রিলে আপাতত, এইচটিটিপি / ২ ওয়েবসকেটগুলি অপ্রচলিত করছে না। এইচটিটিপি 2 এর মাধ্যমে ওয়েবসকেটের সর্বাধিক সুবিধা হ'ল

HTTP/2 works only on Browser Level not Application Level

এর অর্থ HTTP / 2 যোগাযোগের অনুমতি দেওয়ার জন্য কোনও অ্যাপ্লিকেশন (যেমন ওয়েবসাইট) থেকে সার্ভারে কোনও ধরণের জেএসএন বা অন্যান্য ডেটা স্থানান্তর করার জন্য ওয়েবস্কটসের মতো কোনও জেএস এপিআই সরবরাহ করে না। সুতরাং, যতদূর আমি বিশ্বাস করি, HTTP / 2 কেবল ওয়েবস্ককেটকে অপ্রচলিত করে তুলবে যদি এটি সার্ভারের সাথে কথা বলার জন্য ওয়েবসকেটগুলির মতো এপিআই সরবরাহ করতে শুরু করে। যতক্ষণ না এটি ঠিক আপডেট হয়েছে এবং HTTP 1.1 এর দ্রুততম সংস্করণ।


2

আজকের হিসাবে, না।

HTTP / 2, HTTP এর সাথে তুলনা করে, আপনাকে একটি সার্ভারের সাথে সংযোগ বজায় রাখতে দেয়। সেখান থেকে, আপনার একই সাথে একাধিক ডেটা স্ট্রিম থাকতে পারে। উদ্দেশ্য হ'ল আপনি ক্লায়েন্টকে অনুরোধ না করেও একই সাথে একাধিক জিনিস ঠেলাতে পারেন। উদাহরণস্বরূপ, যখন কোনও ব্রাউজার একটি জিজ্ঞাসা করে index.html, সার্ভারটি এছাড়াও চাপতে index.cssএবং চাইবেindex.js । ব্রাউজারটি এর জন্য জিজ্ঞাসা করেনি, তবে সার্ভারটি এটি জিজ্ঞাসা না করেই সরবরাহ করতে পারে কারণ এটি ধরে নিতে পারে যে আপনি কয়েক সেকেন্ডের মধ্যে চাইবেন।

এই দ্রুত পাবার HTTP- র / 1 বিকল্প চেয়ে index.html, এটা পার্স দরকার আবিষ্কার, index.jsএবং index.cssএবং তারপর ঐ ফাইল জন্য 2 অন্যান্য অনুরোধ বিল্ডিং। এইচটিটিপি / 2 সার্ভারকে ক্লায়েন্ট এমনকি জিজ্ঞাসা না করে এমন ডেটা পুশ করতে দেয়।

সেই প্রসঙ্গে, এটি ওয়েবসকেটের মতো, তবে ডিজাইনের দ্বারা বাস্তবে নয়। ওয়েবসকেটের একটি টিসিপি সংযোগ বা সিরিয়াল সংযোগের মতো দ্বি-দিকনির্দেশক যোগাযোগের অনুমতি দেওয়ার কথা রয়েছে। এটি এমন এক সকেট যেখানে দুজনেই একে অপরের সাথে যোগাযোগ করে। এছাড়াও, প্রধান পার্থক্য হ'ল আপনি যে কোনও স্বেচ্ছাসেবী ডেটা প্যাকেটগুলি কাঁচা বাইটে প্রেরণ করতে পারেন, এইচটিটিপি প্রোটোকলে অন্তর্ভুক্ত নয়। শিরোনাম, পাথ, ক্যোয়ারী স্ট্রিংগুলির ধারণাগুলি কেবল হ্যান্ডশেকের সময় ঘটে তবে ওয়েবসকেট একটি ডেটা স্ট্রিম খুলে দেয়।

অন্য পার্থক্যটি হ'ল আপনি জাভাস্ক্রিপ্টে ওয়েবস্কটটিতে আরও অনেক সূক্ষ্ম সুরক্ষিত অ্যাক্সেস পান, যদিও এইচটিটিপি সহ এটি ব্রাউজার দ্বারা পরিচালিত হয়। আপনি HTTP- র সাথে যা কিছু পাবেন তা আপনি XHR/ তে ফিট করতে পারেন fetch()। (: যেমন যে মানে আপনি যে ব্রাউজারটি এটা নিয়ন্ত্রণ করতে সক্ষম ছাড়া পথিমধ্যে এবং পরিবর্তন HTTP- র হেডার পেতে হবে Origin, Cookiesইত্যাদি)। এছাড়াও, HTTP / 2 ধাক্কা দিতে সক্ষম কি তা ব্রাউজারে প্রেরণ করা হয়। তার মানে জেএস সবসময় (যদি কখনও না) জানে না যে জিনিসগুলি ধাক্কা দেওয়া হচ্ছে। আবার, এটি ব্রাউজার এটি ক্যাশে করবে কারণ index.cssএবং index.jsএটি ডেটা প্যাকেটের জন্য এতটা নয় sense

এটি আসলেই সব নামে। এইচটিটিপি মানে হাইপারটেক্সট ট্রান্সফার প্রোটোকল। আমরা সম্পদ স্থানান্তর করার ধারণাটি প্রস্তুত করেছি। ওয়েবসকেট এমন একটি সকেট সংযোগ তৈরির বিষয়ে যেখানে বাইনারি ডেটা দ্বিদ্বিদীভাবে প্রায় পাস হয়।


আমরা সত্যই যার সাথে আলোচনা করছি না তা হ'ল এসএসই (সার্ভার-প্রেরিত ইভেন্টস)। অ্যাপ্লিকেশনটিতে (জেএস) ডেটা পুশ করা HTTP / 2 এর অভিপ্রায় নয়, তবে এটি এসএসইর জন্য। এসটিএসই HTTP / 2 দিয়ে সত্যই শক্তিশালী হয়। তবে ওয়েবসকেটগুলির জন্য এটি বাস্তবের প্রতিস্থাপন নয় যখন গুরুত্বপূর্ণ কী ডেটা নিজেই, ভেরিয়েবলের শেষ পয়েন্টগুলি পৌঁছানো না। ওয়েবসকেটের সাথে প্রতিটি শেষ পয়েন্টের জন্য একটি নতুন ডেটা স্ট্রিম তৈরি করা হয় তবে এসএসইয়ের সাথে এটি ইতিমধ্যে বিদ্যমান এইচটিটিপি / 2 সেশনের মধ্যে ভাগ করা হয়।


এখানে সংক্ষিপ্ত বিবরণ প্রতিটি জন্য উদ্দেশ্য:

  • এইচটিটিপি - একটি সম্পত্তির সাথে একটি অনুরোধের প্রতিক্রিয়া
  • HTTP / 2 - একাধিক সম্পদ সহ একটি অনুরোধের প্রতিক্রিয়া জানুন
  • এসএসই - একমুখী পাঠ্য (ইউটিএফ -8) ইভেন্ট স্ট্রিমের প্রতিক্রিয়া জানায়
  • ওয়েবস্কট - একটি দ্বিপাক্ষিক বাইনারি ডেটা স্ট্রিম তৈরি করুন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.