এটি প্রাথমিকভাবে আমি যা ভাবি তার চেয়ে সহজ .. মূলত আপনার একটি পৃষ্ঠা রয়েছে যা কিছু না করে, যতক্ষণ না আপনি প্রেরণ করতে চান ডেটা উপলব্ধ না হয় (বলুন, একটি নতুন বার্তা উপস্থিত হবে)।
এখানে একটি সত্যিকারের প্রাথমিক উদাহরণ, যা 2-10 সেকেন্ড পরে একটি সাধারণ স্ট্রিং প্রেরণ করে। 404 টি ত্রুটি ফিরে আসার 3 টির 1 সুযোগ (আসন্ন জাভাস্ক্রিপ্ট উদাহরণে ত্রুটি পরিচালনা করে দেখানোর জন্য)
msgsrv.php
<?php
if(rand(1,3) == 1){
/* Fake an error */
header("HTTP/1.0 404 Not Found");
die();
}
/* Send a string after a random number of seconds (2-10) */
sleep(rand(2,10));
echo("Hi! Have a random number: " . rand(1,10));
?>
দ্রষ্টব্য: একটি সত্যিকারের সাইটের সাথে, এপাচের মতো একটি নিয়মিত ওয়েব সার্ভারে এটি চালানো দ্রুত সমস্ত "কর্মী থ্রেড" বেঁধে দেবে এবং অন্যান্য অনুরোধগুলিতে সাড়া দিতে অক্ষম রাখবে .. এর চারপাশে উপায় রয়েছে, তবে এটি লেখার জন্য প্রস্তাবিত পাইথনের বাঁকানো মতো কিছুতে একটি "লং-পোল সার্ভার" , যা অনুরোধ অনুসারে একটি থ্রেডের উপর নির্ভর করে না। ধূমকেতু একটি জনপ্রিয় (যা বেশ কয়েকটি ভাষায় উপলভ্য), এবং টর্নেডো একটি নতুন কাঠামো যা বিশেষত এই জাতীয় কাজের জন্য তৈরি করা হয়েছিল (এটি ফ্রেন্ডফিডের দীর্ঘ-পোলিং কোডের জন্য নির্মিত হয়েছিল) ... তবে একটি সাধারণ উদাহরণ হিসাবে অ্যাপাচি যথেষ্ট পরিমাণের চেয়ে বেশি ! এই স্ক্রিপ্টটি সহজেই যে কোনও ভাষায় লেখা যেতে পারে (আমি খুব সহজেই অ্যাপাচি / পিএইচপি বেছে নিয়েছি এবং স্থানীয়ভাবে এগুলি চালিয়ে যাচ্ছিলাম)
তারপরে, জাভাস্ক্রিপ্টে, আপনি উপরের ফাইলটির জন্য অনুরোধ করুন ( msg_srv.php
) এবং প্রতিক্রিয়াটির জন্য অপেক্ষা করুন। আপনি যখন একটি পান, আপনি ডেটা উপর কাজ। তারপরে আপনি ফাইলটির জন্য অনুরোধ করুন এবং আবার অপেক্ষা করুন, ডেটা অনুসারে কাজ করুন (এবং পুনরাবৃত্তি করুন)
নিম্নলিখিতটি এরকম একটি পৃষ্ঠার উদাহরণ .. পৃষ্ঠাটি লোড হয়ে গেলে এটি msgsrv.php
ফাইলের জন্য প্রাথমিক অনুরোধটি প্রেরণ করে .. যদি এটি সফল হয় তবে #messages
আমরা ম্যাসেজটি ডিভের সাথে সংযোজন করি , তারপরে 1 সেকেন্ডের পরে আমরা আবার ওয়েটফরএমএসজি ফাংশনটি কল করি, যা অপেক্ষার ট্রিগার করে।
1 setTimeout()
সেকেন্ডটি আসলেই একটি বেসিক রেট-সীমাবদ্ধ, এটি ব্যতীত সূক্ষ্মভাবে কাজ করে, তবে যদি msgsrv.php
সর্বদা তাত্ক্ষণিকভাবে ফিরে আসে (উদাহরণস্বরূপ একটি সিনট্যাক্স ত্রুটি সহ) - আপনি ব্রাউজারটি প্লাবিত করেন এবং এটি দ্রুত হিমশীতল হতে পারে। ফাইলটিতে বৈধ জেএসওএন প্রতিক্রিয়া রয়েছে কিনা এবং / অথবা প্রতি মিনিট / সেকেন্ডে চলমান মোট অনুরোধ রক্ষা করা এবং যথাযথভাবে বিরতি দেওয়া উচিত কিনা তা আরও ভালভাবে পরীক্ষা করা হবে।
পৃষ্ঠাটি ত্রুটি হলে, এটি ত্রুটিটি ডিভের সাথে সংযোজন করে #messages
, 15 সেকেন্ড অপেক্ষা করে এবং আবার চেষ্টা করে (প্রতিটি বার্তার পরে আমরা কীভাবে 1 সেকেন্ড অপেক্ষা করি তার অনুরূপ)
এই পদ্ধতির সম্পর্কে দুর্দান্ত জিনিসটি হ'ল এটি অত্যন্ত স্থিতিস্থাপক। যদি ক্লায়েন্টদের ইন্টারনেট সংযোগটি মারা যায়, তবে সময়সীমাটি শেষ হয়ে যাবে, আবার চেষ্টা করুন এবং পুনরায় সংযোগ স্থাপন করুন - এটি কতক্ষণ পোলিংয়ে কাজ করে তা অন্তর্নিহিত, কোনও জটিল ত্রুটি-হ্যান্ডলিংয়ের প্রয়োজন হয় না
যাইহোক, long_poller.htm
কোড, jQuery ফ্রেমওয়ার্ক ব্যবহার করে:
<html>
<head>
<title>BargePoller</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js" type="text/javascript" charset="utf-8"></script>
<style type="text/css" media="screen">
body{ background:#000;color:#fff;font-size:.9em; }
.msg{ background:#aaa;padding:.2em; border-bottom:1px #000 solid}
.old{ background-color:#246499;}
.new{ background-color:#3B9957;}
.error{ background-color:#992E36;}
</style>
<script type="text/javascript" charset="utf-8">
function addmsg(type, msg){
/* Simple helper to add a div.
type is the name of a CSS class (old/new/error).
msg is the contents of the div */
$("#messages").append(
"<div class='msg "+ type +"'>"+ msg +"</div>"
);
}
function waitForMsg(){
/* This requests the url "msgsrv.php"
When it complete (or errors)*/
$.ajax({
type: "GET",
url: "msgsrv.php",
async: true, /* If set to non-async, browser shows page as "Loading.."*/
cache: false,
timeout:50000, /* Timeout in ms */
success: function(data){ /* called when request to barge.php completes */
addmsg("new", data); /* Add response to a .msg div (with the "new" class)*/
setTimeout(
waitForMsg, /* Request next message */
1000 /* ..after 1 seconds */
);
},
error: function(XMLHttpRequest, textStatus, errorThrown){
addmsg("error", textStatus + " (" + errorThrown + ")");
setTimeout(
waitForMsg, /* Try again after.. */
15000); /* milliseconds (15seconds) */
}
});
};
$(document).ready(function(){
waitForMsg(); /* Start the inital request */
});
</script>
</head>
<body>
<div id="messages">
<div class="msg old">
BargePoll message requester!
</div>
</div>
</body>
</html>