লং-পোলিং, ওয়েবসাইটসকেটস, সার্ভার-প্রেরিত ইভেন্টস (এসএসই) এবং ধূমকেতু কী কী?


1046

আমি কিছু নিবন্ধ পড়ার চেষ্টা করেছি, তবে আমি এখনও ধারণাগুলি সম্পর্কে খুব পরিষ্কার নেই।

কেউ কি এই প্রযুক্তিগুলি কী তা আমাকে ব্যাখ্যা করে শট নিতে চান:

  1. দীর্ঘ পোলিং
  2. সার্ভার-প্রেরিত ইভেন্টগুলি
  3. WebSockets
  4. ধূমকেতু

আমি প্রতিবার যে জিনিসটি এসেছি তা হ'ল সার্ভারটি একটি সংযোগ খোলা রাখে এবং ক্লায়েন্টের কাছে ডেটা ঠেলে দেয়। সংযোগটি কীভাবে খোলা রাখা হয় এবং ক্লায়েন্ট কীভাবে পুশ করা ডেটা পায়? (ক্লায়েন্ট কীভাবে ডেটা ব্যবহার করে, সম্ভবত কিছু কোড সাহায্য করতে পারে?)

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


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

অতিরিক্তভাবে: ধূমকেতু এবং সার্ভারসেন্ট ইভেন্টগুলি 2 টি সার্ভার তৈরি না করেই প্রায় রিয়েলটাইম অর্জনের (পিএইচপি) -র কাজ।
পাউইআই

উত্তর:


2075

ক্লায়েন্টের নীচের উদাহরণগুলিতে ব্রাউজার এবং সার্ভারটি হল ওয়েবসাইট হোস্টিং ওয়েবসার্ভার।

এই প্রযুক্তিগুলি বোঝার আগে আপনাকে প্রথমে ক্লাসিক এইচটিটিপি ওয়েব ট্র্যাফিক বুঝতে হবে ।

নিয়মিত এইচটিটিপি:

  1. একটি ক্লায়েন্ট একটি সার্ভার থেকে একটি ওয়েবপৃষ্ঠা জন্য অনুরোধ।
  2. সার্ভার প্রতিক্রিয়া গণনা করে
  3. সার্ভার ক্লায়েন্টকে প্রতিক্রিয়া প্রেরণ করে।

HTTP- র

আজাক্স পোলিং:

  1. কোনও ক্লায়েন্ট নিয়মিত এইচটিটিপি ব্যবহার করে একটি সার্ভার থেকে একটি ওয়েবপৃষ্ঠা অনুরোধ করে (উপরে HTTP দেখুন)।
  2. ক্লায়েন্টটি অনুরোধ করা ওয়েবপৃষ্ঠা গ্রহণ করে এবং পৃষ্ঠাটিতে জাভাস্ক্রিপ্ট কার্যকর করে যা নিয়মিত বিরতিতে (যেমন 0.5 সেকেন্ড) সার্ভার থেকে একটি ফাইলের জন্য অনুরোধ করে।
  3. সার্ভার প্রতিটি প্রতিক্রিয়া গণনা করে এবং সাধারণ HTTP ট্র্যাফিকের মতোই এটি আবার প্রেরণ করে।

আজাক্স পোলিং

অ্যাজাক্স দীর্ঘ-পোলিং:

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

অ্যাজাক্স লং-পোলিং

এইচটিএমএল 5 সার্ভার প্রেরিত ইভেন্টস (এসএসই) / ইভেন্টসোর্স:

  1. কোনও ক্লায়েন্ট নিয়মিত এইচটিটিপি ব্যবহার করে একটি সার্ভার থেকে একটি ওয়েবপৃষ্ঠা অনুরোধ করে (উপরে HTTP দেখুন)।
  2. ক্লায়েন্টটি অনুরোধ করা ওয়েবপৃষ্ঠা গ্রহণ করে এবং সেই পৃষ্ঠাটিতে জাভাস্ক্রিপ্ট কার্যকর করে যা সার্ভারের সাথে একটি সংযোগ খোলে।
  3. সার্ভার ক্লায়েন্টকে একটি ইভেন্ট পাঠায় যখন সেখানে নতুন তথ্য পাওয়া যায়।

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

এইচটিএমএল 5 এসএসই

এইচটিএমএল 5 ওয়েবসাইটসকেট:

  1. একটি ক্লায়েন্ট নিয়মিত HTTP ব্যবহার করে একটি সার্ভার থেকে ওয়েবপেজের জন্য অনুরোধ করে (উপরে HTTP দেখুন)।
  2. ক্লায়েন্টটি অনুরোধ করা ওয়েবপৃষ্ঠা গ্রহণ করে এবং সেই পৃষ্ঠাটিতে জাভাস্ক্রিপ্ট কার্যকর করে যা সার্ভারের সাথে একটি সংযোগ খোলে।
  3. নতুন ডেটা (উভয় পক্ষের) উপলভ্য হলে সার্ভার এবং ক্লায়েন্ট এখন একে অপরকে বার্তা পাঠাতে পারে।

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

এইচটিএমএল 5 ওয়েবসকেটস

ধূমকেতু:

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


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

আপনি ওয়েবসকেট সঙ্গে পিএইচপি ব্যবহার চেক আউট করতে পারেন র্যাচিট


21
এটা সত্যিই দারুন! আমি এসএসই পড়ছি এবং এই নিবন্ধটি পেয়েছি, এটি খুব সুন্দর - যেমন আমি এখন স্টাফের সাথে তুলনা করেছি, আপনি কি এসএসইকে এখানে অন্তর্ভুক্ত করতে পারেন যাতে আমরা ওয়েবস্কোটের সাথে পার্থক্যটিও পরীক্ষা করতে পারি?
সূচক

1
@ টাইম ওহ এটা কি ছিল? আমি ভেবেছিলাম এসএসই মানে সার্ভার-প্রেরিত ইভেন্টগুলি। যাইহোক, ধন্যবাদ, আমি এখন এটি দেখতে।
সূচি

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

5
উভয় সমাধানের মাধ্যমে আপনি একই অর্জন করতে পারেন তবে প্রক্রিয়াটি আলাদা। দীর্ঘ-পোলিং 'নিয়মিত' HTTP ডেটা ব্যবহার করে, এসএসই একটি পৃথক অন্তর্নিহিত প্রোটোকল ব্যবহার করে এবং দীর্ঘ ভোটদানের তুলনায় আলাদা সার্ভার সেটআপের প্রয়োজন।
টাইম

2
আচ্ছা আপনি চাইলে অ্যাপাচি ব্যবহার করতে পারতেন। তবে অনেক লোক নোড.জেএস ব্যবহার করে কারণ এটির ইভেন্ট লুপ রয়েছে। কিন্তু এ্যাপাচি জন্য, দেখুন stackoverflow.com/questions/12203443/...
Tieme

37

টিয়েম তার দুর্দান্ত উত্তরের জন্য প্রচুর প্রচেষ্টা করেছিলেন, তবে আমি মনে করি ওপিএস প্রশ্নের মূল বিষয় হ'ল প্রতিটি প্রযুক্তি কীভাবে কাজ করে তার চেয়ে এই প্রযুক্তিগুলি কীভাবে পিএইচপি সম্পর্কিত rela

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

1) পিএইচপি খুব বেসিক সিজিআই হিসাবে শুরু হয়েছিল। প্রারম্ভিক পর্যায়ে থেকে পিএইচপি খুব এগিয়ে গেছে, তবে এটি ছোট পদক্ষেপে ঘটেছে in এটি বর্তমানে এম্বেড-সক্ষম এবং নমনীয় সি লাইব্রেরি হয়ে ওঠার মধ্যেই পিএইচপি এর ইতিমধ্যে বহু মিলিয়ন ব্যবহারকারী ছিল, যাদের বেশিরভাগই মৃত্যুদন্ড কার্যকর করার পূর্ববর্তী মডেলের উপর নির্ভরশীল ছিল, তাই এটি এখনও এড়াতে দৃ solid় প্রচেষ্টা চালায় নি অভ্যন্তরীণভাবে সিজিআই মডেল। এমনকি কমান্ডলাইন ইন্টারফেস পিএইচপি গ্রন্থাগারটি (লিনাক্সের উপর libphp5.so, উইন্ডোতে php5ts.dll ইত্যাদিতে) আহ্বান জানায় যেন এটি এখনও সিইজি কোনও জিইটি / পোস্ট অনুরোধ প্রক্রিয়াকরণ করে। এটি কোডটি এখনও কার্যকর করে যেমন এটি কেবল একটি "পৃষ্ঠা" তৈরি করতে হবে এবং তারপরে এটি জীবন চক্রটি শেষ করবে। ফলস্বরূপ, এটি মাল্টি-থ্রেড বা ইভেন্ট চালিত প্রোগ্রামিং (পিএইচপি ব্যবহারকারী স্পেসের মধ্যে) এর জন্য খুব কম সমর্থন পেয়েছে, এটি বর্তমানে রিয়েল টাইম, মাল্টি-ব্যবহারকারী অ্যাপ্লিকেশনগুলির জন্য অনুশীলনীয় করে তুলেছে।

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

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

এই সমস্যাগুলিও ঠিক করার জন্য পিএইচপি 7 হ'ল একটি দুর্দান্ত পদক্ষেপ হবে এবং রিয়েল-টাইম অ্যাপ্লিকেশনগুলির একটি প্ল্যাটফর্ম হিসাবে খুব প্রতিশ্রুতিবদ্ধ বলে মনে হচ্ছে।


2
একটি ছোট সংশোধন: পিএইচপি সর্বদা সিতে লিখিত ছিল, যেমন এখানে দেখা যায়: museum.php.net/php1 এছাড়াও, "কম ব্যবহৃত (তবে প্রচুর পরিমাণে বেশি জনপ্রিয়)" বরং স্ববিরোধী; আপনি কি বলতে চাইছেন "আরও ফ্যাশনেবল"?
আইএমএসওপি

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

আমি পার্ল সম্পর্কে কিছুটা সরিয়ে ফেলব কারণ এটি অফিসিয়াল ডকুমেন্টেশনের সাথে ভালভাবে মেশেনি, তবে এটি এখনও পিএইচপি এর প্রাথমিক বিকাশের একটি বিভ্রান্তিকর জায়গা is
JSON

পিএইচপি 7 রিয়েল-টাইম অ্যাপ্লিকেশনগুলির প্ল্যাটফর্ম হিসাবে খুব প্রতিশ্রুতিবদ্ধ বলে মনে হচ্ছে? রিয়েল-টাইম অ্যাপ্লিকেশনগুলির জন্য পিএইচপি 7 এর কোন উন্নতি / পরিবর্তন?
-


9

আমি এগুলি সম্পর্কে নোট দেওয়ার চেষ্টা করেছি এবং জাভা দৃষ্টিকোণ থেকে উদাহরণ সংগ্রহ করেছি এবং লিখেছি ।

জাভা ডেভেলপারদের জন্য এইচটিটিপি

বিপরীত Ajax - পুরানো শৈলী

সার্ভারের পাশে অ্যাসিঙ্ক হ্যান্ডলিং

বিপরীত Ajax - নতুন শৈলী

সার্ভার প্রেরিত ইভেন্টস

এখানে যে কোনও জাভা বিকাশকারী একই বিষয়ে সন্ধান করছে তাদের জন্য এটি এখানে রেখে দেওয়া।


এই সাইটগুলির বেশিরভাগ কাজ করে না!
আলেকজান্ডার ডান

@ আলেকজান্দার ডান এটি আনার জন্য আপনাকে ধন্যবাদ। আমি আপডেট হওয়া লিঙ্কগুলি দিয়ে এটি সংশোধন করব
জন

1

আপনি কেবল রিয়েল-টাইম যোগাযোগের জন্য আপনার ওয়েব অ্যাপে সহজেই নোড.জেএস ব্যবহার করতে পারেন। নোড.জেএস সত্যই শক্তিশালী যখন এটি ওয়েবসকেট সম্পর্কে। সুতরাং "নোড.জেএস এর মাধ্যমে পিএইচপি বিজ্ঞপ্তিগুলি" একটি দুর্দান্ত ধারণা হবে।

এই উদাহরণটি দেখুন: পিএইচপি এবং নোড.জেএস দিয়ে একটি রিয়েল-টাইম চ্যাট অ্যাপ তৈরি করা

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