কোন পরিস্থিতিতে অ্যাজএক্স দীর্ঘ / সংক্ষিপ্ত পোলিং এইচটিএমএল 5 ওয়েবস্কেলের চেয়ে বেশি পছন্দ করবে?


306

আমি বন্ধুদের জন্য একটি ছোট চ্যাট অ্যাপ্লিকেশন তৈরি করছি, তবে কীভাবে সময় মতো তথ্য পাওয়া যায় যা ম্যানুয়াল হিসাবে নয় বা একটি পৃষ্ঠা রিফ্রেশ করার জন্য জোরালো হিসাবে প্রচলিত নয় uns

বর্তমানে, আমি সাধারণ এজেএক্স ব্যবহার করে এটি বাস্তবায়ন করছি, তবে একটি সংক্ষিপ্ত টাইমার বিচ্ছিন্ন হয়ে গেলে নিয়মিত সার্ভারে আঘাত করার অসুবিধা হয়।

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

যেহেতু উভয় প্রযুক্তিই একই কাজ করে বলে মনে হচ্ছে, কোন ধরণের পরিস্থিতিগুলির মধ্যে একটির একে অপরকে ব্যবহার করা পছন্দ করবে? আরও সুনির্দিষ্টভাবে, এইচটিএমএল 5 ওয়েবসকেটগুলি কি এজেএক্স দীর্ঘ / সংক্ষিপ্ত পোলিং অপ্রচলিত করেছে, বা ওয়েবসকেটের চেয়ে আজেএক্সকে প্রাধান্য দেওয়ার বাধ্য করার কারণ রয়েছে?

উত্তর:


508

ওয়েবসকেটগুলি অবশ্যই ভবিষ্যত।

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

ওয়েবআরটিসি পিয়ার-টু-পিয়ার যোগাযোগের অনুমতি দেয়।

আমি ওয়েবসকেট শেখার প্রস্তাব দিই ।

তুলনা:

ওয়েবে বিভিন্ন যোগাযোগ কৌশল

  • আজাক্স - requestresponse। সার্ভারের সাথে একটি সংযোগ তৈরি করে, optionচ্ছিক ডেটা সহ অনুরোধ শিরোনামগুলি প্রেরণ করে, সার্ভারের কাছ থেকে প্রতিক্রিয়া পান এবং সংযোগটি বন্ধ করে দেয়। সমস্ত বড় ব্রাউজারে সমর্থিত।

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

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

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

  • সার্ভার-প্রেরিত ইভেন্ট - clientserver। ক্লায়েন্ট সার্ভারের সাথে অবিরাম এবং দীর্ঘমেয়াদী সংযোগ স্থাপন করে। কেবল সার্ভার কোনও ক্লায়েন্টকে ডেটা প্রেরণ করতে পারে। ক্লায়েন্ট যদি সার্ভারে ডেটা প্রেরণ করতে চায় তবে এটি করার জন্য অন্য প্রযুক্তি / প্রোটোকল ব্যবহারের প্রয়োজন হবে। এই প্রোটোকলটি HTTP সামঞ্জস্যপূর্ণ এবং বেশিরভাগ সার্ভার-সাইড প্ল্যাটফর্মগুলিতে প্রয়োগ করা সহজ। এটি লং পোলিংয়ের পরিবর্তে ব্যবহার করার জন্য একটি পছন্দসই প্রোটোকল। সমর্থন চার্ট (ভাল, IE বাদে) | উইকিপিডিয়া

সুবিধাদি:

ওয়েবসকেটস সার্ভার-সাইডের প্রধান সুবিধাটি হ'ল এটি কোনও এইচটিটিপি অনুরোধ নয় (হ্যান্ডশেকের পরে), তবে একটি সঠিক বার্তা ভিত্তিক যোগাযোগ প্রোটোকল। এটি আপনাকে বিশাল কর্মক্ষমতা এবং আর্কিটেকচার সুবিধা অর্জন করতে সক্ষম করে । উদাহরণস্বরূপ, নোড.জেজে, আপনি বিভিন্ন সকেট সংযোগের জন্য একই মেমরিটি ভাগ করতে পারেন, যাতে তারা প্রতিটি ভাগ করে নেওয়া ভেরিয়েবল অ্যাক্সেস করতে পারে। অতএব, আপনাকে মাঝখানে কোনও এক্সচেঞ্জ পয়েন্ট হিসাবে একটি ডাটাবেস ব্যবহার করার দরকার নেই (যেমন পিএইচপি এর মতো ভাষার সাথে এজেএক্স বা লং পোলিংয়ের মতো)। আপনি র‌্যামে ডেটা সঞ্চয় করতে পারেন, বা এমনকি সরাসরি সকেটের মধ্যে পুনরায় প্রকাশ করতে পারেন।

সুরক্ষা বিবেচনা

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

পুনশ্চ

মনে রাখবেন যে ওয়েবসকেটগুলিতে সাধারণত নেটওয়ার্কিংয়ের জন্য যুক্তিগুলির একটি খুব আলাদা দৃষ্টিভঙ্গি থাকে , রিয়েল-টাইম গেমগুলির মতো এই সময়ের সমস্ত সময় ছিল, এবং এটি HTTP এর মতো নয়।


15
এটি নিজের পক্ষে সামঞ্জস্যতা সম্পর্কে নয়। যোগাযোগটি কীভাবে ঘটছে তা পুরোপুরি পুনর্বিবেচনা করতে চলেছে এটি সবচেয়ে গুরুত্বপূর্ণ। যেহেতু RESTful API গুলি অনুরোধ> প্রতিক্রিয়া নিদর্শন নিয়ে কাজ করে, এখানে দ্বি-দিকনির্দেশক যোগাযোগ অর্থহীন হবে be তাই রেস্টস্টুল এপিআই-এর ক্যোয়ারী করার জন্য ওয়েবসকেটগুলি ব্যবহার করার চেষ্টা করা - এটি একটি বিস্ময়কর প্রচেষ্টা এবং এটির কোনও উপকারিতা মোটেই দেখতে পাচ্ছেন না। আপনার যদি আরইএসএসএফুল এপিআই থেকে ডেটা প্রয়োজন হয় তবে রিয়েল-টাইম পদ্ধতিতে, তবে আপনি ওয়েবসকেটগুলির মতো দ্বি নির্দেশমূলক যোগাযোগের সাথে কাজ করবে এমন ডেটা পুশ করতে ওয়েবসকেটস এপিআই তৈরি করেন। আপনি কোণে এমন জিনিসগুলির সাথে তুলনা করার চেষ্টা করছেন যা তারা তুলনামূলক নয় :)
moka

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

4
দীর্ঘ ভোটদান কোনও নোংরা কাজ নয়, এবং এটি ওয়েবস্কট থেকে আলাদা। এই দুটি বিভিন্ন দৃশ্যে ব্যবহৃত বোঝানো হয়।
ব্যাগজম্যান

5
@ ব্যাগজম্যান লং পোলিং প্রযুক্তি ব্যবহারের একটি "হ্যাকি" ফলাফল অর্জনের জন্য যা প্রযুক্তিটি সংজ্ঞায়িতভাবে অনুমোদিত হয় নি এবং মানক বিকল্প নেই। লং পোলিংয়ের অস্তিত্বের কারণ হ'ল পিওরিয়ড, ডাব্লুএস-এর মতো নয়।
মোক

4
@ এমোকা: ক্লাউডফ্লেয়ারের ফ্রি-টায়ার একটি টেকসই 400 + জিবিপিএস আক্রমণ শোষিত করবে। আপনার ওয়ালেট কি এডাব্লুএস বিল শোষণ করতে পারে? আপনার উত্সের বিরুদ্ধে অভিযোগগুলি মোকাবেলা করার ক্ষেত্রে এডাব্লুএস এবং ক্লাউডফ্লেয়ারের বিপরীত দৃষ্টিভঙ্গি রয়েছে। আমরা যতক্ষণ ট্রেডস নিয়ে আলোচনা করছি ততক্ষণ এটি মনে রাখার মতো কিছু। :)
ডানেউ

11

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


এই সমস্তগুলির মধ্যে, আপনি কাকে দেখার পরামর্শ দিচ্ছেন?
সোমবার

দীর্ঘ ভোটদানের মাধ্যমে আমার সাফল্য হয়েছে, একমাত্র কৌশল (এটি এবং অন্যান্য প্রযুক্তির জন্য) কোনও সার্ভার থ্রেড বেঁধে রাখছে না। আপনি যদি অ্যাসিক্রোনাস সার্ভার কোড ব্যবহার না করেন তবে এটি স্কেল হবে না।
bmm6o

1
@ সোমডো মাকসিমস-মিহেজেভস আপনার প্রশ্নের উত্তরটির প্রথম দুটি অনুচ্ছেদে সুন্দরভাবে উত্তর দিয়েছেন। ওয়েবসকেট ব্যবহার করুন।
জেফ শেফিল্ড

7

চ্যাট অ্যাপ্লিকেশন বা অন্য যে কোনও অ্যাপ্লিকেশনের জন্য যা সার্ভারের সাথে ধ্রুবক কথোপকথনে WebSocketsথাকে, সর্বোত্তম বিকল্প। তবে, আপনি কেবল WebSocketsএমন একটি সার্ভার ব্যবহার করতে পারেন যা তাদের সমর্থন করে, যাতে আপনি প্রয়োজনীয় গ্রন্থাগারগুলি ইনস্টল করতে না পারলে এগুলি ব্যবহারের আপনার ক্ষমতা সীমাবদ্ধ করতে পারে। কোন ক্ষেত্রে, Long Pollingঅনুরূপ কার্যকারিতা অর্জন করতে আপনার ব্যবহার করতে হবে।


5
ওয়েবসকেটগুলি প্রতিটি সার্ভার দ্বারা সমর্থিত হয় ... আপনাকে কেবল নোড.জেএস বা অনুরূপ কিছু ইনস্টল করতে হবে।
নুব

9
হ্যাঁ যে কোনও সার্ভার ওয়েবসকেটকে সমর্থন করবে তা বোঝাতে কিছুটা টুইট করলেন। তবে, আপনি যদি হোস্টিং পরিষেবা ব্যবহার করছেন তবে আপনি সেগুলি ব্যবহার করতে সক্ষম নাও হতে পারেন।
ব্রান্ট ওলসেন

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

1
@ স্টোনিকে বাদ দিয়ে আপনার সার্ভারে ওয়েবসকেট সেটআপ করা দরকার (হ্যান্ডলারগুলি, ইত্যাদি) ওয়েবসকেটের উপর দীর্ঘ ভোট দেওয়ার কোনও কারণ নেই। ওয়েবসাইটসকেটটি অনেক দ্রুত (কম বিলম্বিত) এবং সার্ভারকে ক্লায়েন্টকে না জিজ্ঞাসা করে ক্লায়েন্টের সাথে "কথা বলার" অনুমতি দেয়। আজকাল আমি সিগন্যালার ব্যবহার করি (আমার মতে তৈরি ওয়েবস্কোটের অন্যতম সেরা বাস্তবায়ন - এটি ক্লায়েন্ট এবং সার্ভারে চলে এবং ক্লায়েন্টকে সার্ভারে এবং ক্লায়েন্টের সার্ভারে পদ্ধতিগুলি কল করতে দেয় যেমন কোনও পার্থক্য নেই) প্রতিটিতে ওয়েবসাইট আমি - ডায়নামিক সামগ্রী লোড হচ্ছে, অতল পৃষ্ঠা, ইত্যাদি
DividedByZero

0

এক্সএইচআর পোলিং বনাম এসএসই বনাম ওয়েবসকেটস

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

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

  • সার্ভার প্রেরিত ইভেন্ট ক্লায়েন্ট সার্ভারে অনুরোধ প্রেরণ করে। সার্ভার যে কোনও সময় ওয়েবপৃষ্ঠায় নতুন ডেটা প্রেরণ করে।

    Ditionতিহ্যগতভাবে, একটি ওয়েব পৃষ্ঠাকে নতুন ডেটা পাওয়ার জন্য সার্ভারে একটি অনুরোধ প্রেরণ করতে হবে; এটি হ'ল পৃষ্ঠাটি সার্ভার থেকে ডেটা অনুরোধ করে। সার্ভার-প্রেরিত ইভেন্টগুলির সাথে, কোনও সার্ভারের পক্ষে ওয়েব পৃষ্ঠায় বার্তা প্রেরণ করে যে কোনও সময় কোনও ওয়েব পৃষ্ঠায় নতুন ডেটা প্রেরণ করা সম্ভব। এই আগত বার্তাগুলি ওয়েব পৃষ্ঠার ভিতরে ইভেন্টস + ডেটা হিসাবে বিবেচনা করা যেতে পারে। মোজিলা

  • ওয়েবসকেটগুলি প্রাথমিক হ্যান্ডশেকের পরে (এইচটিটিপি প্রোটোকলের মাধ্যমে)। ওয়েবসকেট প্রোটোকলটি ব্যবহার করে যোগাযোগ দ্বিপাক্ষিকভাবে করা হয়।

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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.