সার্ভার-প্রেরিত ইভেন্ট এবং পিএইচপি - সার্ভারে ইভেন্টগুলি ট্রিগার করে কী?


93

সমস্ত,

এইচটিএমএল 5 রকসের সার্ভার-প্রেরিত ইভেন্টগুলিতে (এসএসই) একটি দুর্দান্ত শিক্ষামূলক টিউটোরিয়াল রয়েছে:

http://www.html5rocks.com/en/tutorials/eventsource/basics/

তবে, আমি একটি গুরুত্বপূর্ণ ধারণাটি বুঝতে পারি না - সার্ভারে এমন ইভেন্টটি কী ঘটায় যা একটি বার্তা প্রেরণের কারণ ঘটায়?

অন্য কথায় - এইচটিএমএল 5 উদাহরণে - সার্ভারটি কেবল একবার টাইমস্ট্যাম্প প্রেরণ করে :

<?php
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache'); // recommended to prevent caching of event data.
function sendMsg($id, $msg) {
  echo "id: $id" . PHP_EOL;
  echo "data: $msg" . PHP_EOL;
  echo PHP_EOL;
  ob_flush();
  flush();
}
$serverTime = time();
sendMsg($serverTime, 'server time: ' . date("h:i:s", time()));

যদি আমি ব্যবহারিক উদাহরণ তৈরি করতাম - উদাহরণস্বরূপ, একটি ফেসবুক-স্টাইলের "প্রাচীর" বা স্টক-টিকার, যাতে সার্ভার ক্লায়েন্টকে প্রতিবার কোনও তথ্য পরিবর্তন করে কোনও নতুন বার্তা "ধাক্কা" দেয়, কীভাবে এটি কাজ করে?

অন্য কথায় ... পিএইচপি স্ক্রিপ্টের কি এমন লুপ রয়েছে যা অবিচ্ছিন্নভাবে চলে, ডেটা পরিবর্তনের জন্য পরীক্ষা করে, তারপরে প্রতি বার্তা পাঠালে এটি খুঁজে পাওয়া যায়? যদি তা হয় - কখন যে প্রক্রিয়াটি শেষ করবেন আপনি কীভাবে জানেন?

বা - পিএইচপি স্ক্রিপ্টটি কেবল বার্তাটি পাঠায়, তারপরে শেষ হবে (HTML5 রকসের উদাহরণে যেমন প্রদর্শিত হবে)? যদি তাই হয় - আপনি কীভাবে অবিচ্ছিন্ন আপডেট পাবেন? ব্রাউজারটি কি নিয়মিত বিরতিতে পিএইচপি পৃষ্ঠায় পোলিং করছে? যদি তাই হয় - কীভাবে এটি "সার্ভার-প্রেরিত ইভেন্ট"? এটি কীভাবে জাভাস্ক্রিপ্টে সেটইন্টারভাল ফাংশন লেখার চেয়ে আলাদা যা AJAX ব্যবহার করে নিয়মিত বিরতিতে পিএইচপি পৃষ্ঠায় কল করতে পারে?

দুঃখিত - এটি সম্ভবত একটি অবিশ্বাস্য নিষ্পাপ প্রশ্ন। তবে আমি যে উদাহরণগুলির সন্ধান করতে পেরেছি তার একটিও এটি পরিষ্কার করে দেয়।

[হালনাগাদ]

আমি মনে করি আমার প্রশ্নটি খারাপভাবে উচ্চারিত হয়েছিল, সুতরাং এখানে কিছু স্পষ্টতা দেওয়া হয়েছে।

ধরা যাক আমার কাছে একটি ওয়েব পৃষ্ঠা রয়েছে যা অ্যাপলের স্টকের সর্বশেষতম দাম প্রদর্শন করবে।

যখন ব্যবহারকারী প্রথম পৃষ্ঠাটি খুলবে, পৃষ্ঠাটি আমার "স্ট্রিম" এর URL সহ ইভেন্টসোর্স তৈরি করে।

var source = new EventSource('stream.php');

আমার প্রশ্ন এটি - "স্ট্রিম.এফপি" কীভাবে কাজ করা উচিত?

এটার মত? (সুডোকোড):

<?php
    header('Content-Type: text/event-stream');
    header('Cache-Control: no-cache'); // recommended to prevent caching of event data.
    function sendMsg($msg) {
        echo "data: $msg" . PHP_EOL;
        echo PHP_EOL;
        flush();
    }

    while (some condition) {
        // check whether Apple's stock price has changed
        // e.g., by querying a database, or calling a web service
        // if it HAS changed, sendMsg with new price to client
        // otherwise, do nothing (until next loop)
        sleep (n) // wait n seconds until checking again
    }
?>

অন্য কথায় - ক্লায়েন্টের সাথে "সংযুক্ত" থাকা অবধি কি "স্ট্রিম.এফপি" খোলা থাকে?

যদি তাই হয় - এর অর্থ stream.phpকি আপনার সহবর্তী ব্যবহারকারীরা যতটা থ্রেড চালাচ্ছেন ? যদি তা হয় - তবে কি এটি দূরবর্তীভাবে সম্ভব, বা কোনও অ্যাপ্লিকেশন তৈরির উপযুক্ত উপায়? এবং আপনি কীভাবে জানবেন কখন আপনি একটি উদাহরণ শেষ করতে পারেন stream.php?

আমার নিষ্পাপ ছাপটি হ'ল, যদি এটি হয় তবে পিএইচপি এই জাতীয় সার্ভারের জন্য উপযুক্ত প্রযুক্তি নয় । তবে আমি এতক্ষণ দেখেছি এমন সমস্ত ডেমোই বোঝাচ্ছে যে পিএইচপি ঠিক এই জন্য ঠিক আছে, যার কারণেই আমি এতটা বিভ্রান্ত ...


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

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

বর্তমানে আইই 11 বা অ্যান্ড্রয়েড ব্রাউজার দ্বারা সমর্থিত নয় caniuse.com/eventsource
পিজে ব্রুনেট

4
যদি কেউ এসএসএইচপি কোডের প্রয়োজন হয়: github.com/shahઝા
মুহাম্মদ শাহজাদ

4
আমিও একই প্রশ্ন করেছিলাম এবং আমি মনে করি আমি গভীরভাবে বুঝতে পারছি তুমি দ্বারা কি বোঝাতে চেয়েছেন কি সার্ভারে ঘটনা ট্রিগার ... । আপনি যখন কোনও অবজেক্ট তৈরি EventSource('stream.php')করেন, ক্লায়েন্ট একটি সংযোগ খোলে stream.phpযা এজ্যাক্সের মাধ্যমে কল করার মতো। এই সংযোগটি আপনার সার্ভারের সাইড কোডটি ট্রিগার করে এবং আপনার সার্ভারের সাইড কোডটিতে যতক্ষণ কিছু বলার থাকে ততক্ষণ সংযোগটি খোলা রাখে। তারপরে সংযোগটি বন্ধ হয়ে যায় এবং অল্প বিলম্বের পরে (ক্রোমটিতে আমার মনে হয় 3 সেকেন্ড) ক্লায়েন্ট সংযোগটি stream.phpআবার খোলে যা আপনার ফাইলটিকে আবার ট্রিগার করে ।
আহমদ মালেকি

উত্তর:


29

"... ক্লায়েন্টের সাথে" সংযুক্ত "থাকা অবধি কি" স্ট্রিম.এফপি "খোলা থাকে?"

হ্যাঁ, এবং আপনার সিউডো কোডটি একটি যুক্তিসঙ্গত পন্থা।

"এবং আপনি কীভাবে জানবেন যে আপনি কখন স্ট্রিম.এফপি এর উদাহরণ শেষ করতে পারবেন?"

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

"... যদি এটি হয় তবে পিএইচপি এই জাতীয় সার্ভারের জন্য উপযুক্ত প্রযুক্তি নয় But তবে আমি এতক্ষণ যে সমস্ত ডেমো দেখলাম তার থেকে বোঝা যাচ্ছে যে পিএইচপি ঠিক এইভাবে ঠিক আছে, তাই আমি কেন তাই বিভ্রান্ত ... "

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

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

স্ট্রিমিংয়ের জন্য অ্যাপাচি + পিএইচপি ব্যবহারের সাথে প্রধান স্কেলাবিলিটি ইস্যু হ'ল প্রতিটি অ্যাপাচি প্রক্রিয়ার স্মৃতি। আপনি যখন হার্ডওয়্যারটির স্মৃতি সীমাতে পৌঁছেছেন তখন ক্লাস্টারে অন্য একটি মেশিন যুক্ত করার ব্যবসায়ের সিদ্ধান্ত নিন বা অ্যাপাচি লুপ থেকে কেটে ফেলুন এবং একটি ডেডিকেটেড এইচটিটিপি সার্ভার লিখুন। পরবর্তীটি পিএইচপিতে করা যেতে পারে যাতে আপনার সমস্ত বিদ্যমান জ্ঞান এবং কোডটি আবার ব্যবহার করা যায়, বা আপনি পুরো অ্যাপ্লিকেশনটিকে অন্য ভাষায় পুনরায় লিখতে পারেন। আমার খাঁটি বিকাশকারী সি ++ তে একটি উত্সর্গীকৃত, প্রবাহিত HTTP সার্ভার লিখবেন। আমার মধ্যে ম্যানেজার অন্য একটি বাক্স যুক্ত করতে হবে।


প্রতিটি অ্যাপাচি সংযোগ প্রক্রিয়া যেমন মেমরি গ্রাস করে, তার পরিবর্তে এনগিনেক্স ব্যবহার করা কি ভাল?
ঝাং বাজ

@ ঝাংবাউজ যেখানে আমি অ্যাপাচি + পিএইচপি বলেছি সেখানে এর অর্থ আসলে "ওয়েব-সার্ভার + পিএইচপি প্রক্রিয়া", সুতরাং মূলত কোনও ভিন্ন ওয়েব সার্ভার ব্যবহারের সাথে কোনও পার্থক্য নেই।
ড্যারেন কুক

এর মতো সার্ভারগুলিও হতে পারে? github.com/hoaproject/Events स्त्रोत বা github.com/hhxsv5/php-sse
এনরিক

আরও মনে রাখবেন যে এনগিনেক্স এর
এনরিক

32

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

সুতরাং, সংযোগটি অব্যাহত রাখতে আপনাকে আপনার কোডটি একটি লুপে আবৃত করতে হবে এবং ক্রমাগত আপডেটগুলি চেক করতে হবে।

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

এছাড়াও, আমার পরীক্ষা করে দেখুন সার্ভার-প্রেরিত ইভেন্টগুলির জন্য পিএইচপি লাইব্রেরিটি দেখুন, পিএইচপি-তে সার্ভার-প্রেরিত ইভেন্টগুলি কীভাবে করা যায় এবং কোডটি আরও সহজ করা যায় সে সম্পর্কে আপনি আরও বুঝতে পারবেন।


4
আপনি কি "এটি স্ক্রিপ্টের প্রয়োগের সময়টি নিয়ন্ত্রণ করে সমাধান করতে পারেন এবং স্ক্রিপ্টটি যখন সময়সীমার চেয়ে বেশি ছাড়িয়ে যায়" এর সমাধান করতে পারেন? আপনার যদি অতিরিক্ত সংখ্যক ব্যবহারকারীর সংখ্যা থাকে তবে ব্যবহারকারীটি কেবল 3 সেকেন্ডের মধ্যে আবার সংযোগ স্থাপনের কারণে সংযোগটি বন্ধ করে কি এটি কি রিসোর্সের ব্যবহারের উন্নতি করবে?
লুক

4

আমি লক্ষ্য করেছি যে sse টেকিংক ক্লায়েন্টকে প্রতিটি দেরী ডেটা প্রেরণ করে (ক্লায়েন্ট পৃষ্ঠা থেকে অ্যাজাক্স পুলিং ডেটা থেকে পুলিং ডেটা টেকিংকটি উল্টানোর মতো সমালোচনা) তাই এই সমস্যাটি কাটিয়ে উঠতে আমি এটি একটি সিএস সার্ভার.এফপি পৃষ্ঠায় তৈরি করেছি:

<?php
        session_start();
        header('Content-Type: text/event-stream');
        header('Cache-Control: no-cache'); // recommended to prevent caching of event data
        require 'sse.php';
        if ($_POST['message'] != ""){
                $_SESSION['message'] = $_POST['message'];
                $_SESSION['serverTime'] = time();
        }
        sendMsg($_SESSION['serverTime'], $_SESSION['message'] );
?>

এবং sse.php হ'ল:

<?php
function sendMsg($id, $msg) {
  echo "id: $id" . PHP_EOL;
  echo "data: $msg" . PHP_EOL;
  echo PHP_EOL;
  ob_flush();
  flush();
}
?>

লক্ষ্য করুন যে sseSerer.php এ আমি একটি সেশন শুরু করি এবং একটি সেশন ভেরিয়েবল ব্যবহার করি! সমস্যা কাটিয়ে উঠতে।

এছাড়াও আমি আজাক্সের মাধ্যমে sseServer.php কল করি (পোস্টিং এবং মান সেট করে) variable message যখনই আমি বার্তা "আপডেট" করে)।

এখন jQuery এ (জাভাস্ক্রিপ্ট) আমি এর মতো কিছু করি: 1 ম) আমি একটি বৈশ্বিক পরিবর্তনশীল var টাইমস্ট্যাম্প = 0 ঘোষণা করি ; ২ য়) আমি পরবর্তী অ্যালগরিদম ব্যবহার করি:

if(typeof(EventSource)!=="undefined"){
        var source=new EventSource("sseServer.php");
        source.onmessage=function(event)
        if ((timeStamp!=event.lastEventId) && (timeStamp!=0)){
                /* this is initialization */
                timeStamp=event.lastEventId;
                $.notify("Please refresh "+event.data, "info");
        } else {
                if (timeStamp==0){
                         timeStamp=event.lastEventId;
                }
        } /* fi */

} else {
        document.getElementById("result").innerHTML="Sorry, your browser does not support server-sent events...";
} /* fi */

এর লাইনে: $.notify("Please refresh "+event.data, "info"); আপনি কী বার্তাটি পরিচালনা করতে পারবেন।

আমার ক্ষেত্রে আমি jQuery বিজ্ঞপ্তি পাঠাতাম।

POST এর মাধ্যমে "বার্তা" পাস করার জন্য আপনি POSIX PIPES বা একটি DB টেবিল ব্যবহার করতে পারেন কারণ sseSverver.php "অসীম লুপ" এর মতো কিছু করে।

আমার সমস্যাটি হ'ল উপরের কোডটি সমস্ত ক্লায়েন্টকে "বার্তা" প্রেরণ করে না তবে কেবল জোড়ায় (ক্লায়েন্ট যা sseServer.php নামে পরিচিত প্রতিটি জোড়ের জন্য স্বতন্ত্র হিসাবে কাজ করে) তাই আমি প্রযুক্তি পরিবর্তন করব এবং একটিতে পৃষ্ঠাটি থেকে ডিবি আপডেট যা আমি "বার্তা" এবং তারপরে sseServer.php এর পরিবর্তে বার্তাটি পোষ্টের মাধ্যমে পেতে চাইলে এটি ডিবি টেবিল থেকে পাবেন।

আমি আশা করি আমার সাহায্য হবে!


3

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

তবে, আপনি যদি নিজের সত্ত্বাকে অবজেক্ট হিসাবে পরিচালনা করেন এবং সেগুলি কোনও ধরণের মধ্যস্থতাকারী শ্রেণীর মাধ্যমে পাস করেন তবে আপনি সেই প্রক্রিয়াটিতে ঝুঁকতে পারেন। এই উদাহরণটি দেখুন:

<?php
class MyQueryManager {
    public function find($myObject, $objectId) {
        // Issue a select query against the database to get this object
    }

    public function save($myObject) {
        // Issue a query that saves the object to the database
        // Fire a new "save" event for the type of object passed to this method
    }

    public function delete($myObject) {
        // Fire a "delete" event for the type of object
    }
}

আপনার অ্যাপ্লিকেশনটিতে, আপনি যখন সংরক্ষণের জন্য প্রস্তুত হন:

<?php
$someObject = $queryManager->find("MyObjectName", 1);
$someObject->setDateTimeUpdated(time());
$queryManager->save($someObject);

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

আপনি অবশ্যই এইভাবে ডাটাবেসে ম্যানুয়াল পরিবর্তনগুলি ধরবেন না - তবে আপনি যদি কোনও ফ্রিকোয়েন্সি সহ আপনার ডাটাবেসে ম্যানুয়ালি কিছু করে থাকেন তবে আপনার উচিত:

  • আপনাকে একটি ম্যানুয়াল পরিবর্তন করতে হবে এমন সমস্যার সমাধান করুন
  • প্রক্রিয়াটি ত্বরান্বিত করার জন্য একটি সরঞ্জাম তৈরি করুন এবং এই ইভেন্টগুলিকে চালিত করুন

4
কলিন - আপনার উত্তরের জন্য ধন্যবাদ। আমার দোষ - আমার প্রশ্নটি পরিষ্কার নয় - তবে আমি যা বলছি তা এটি সত্য নয় really আমি যা বলতে চাইছিলাম তা হ'ল ... যদি আপনি পিএইচপি আপনার "সার্ভার" হিসাবে ব্যবহার করেন - আপনার ক্লায়েন্টের ইভেন্টসোর্স থেকে আপনি যে পিএইচপি স্ক্রিপ্ট কল করেছেন তখন ক্লায়েন্টের সাথে সংযুক্ত থাকার পুরো সময়টি চালানো দরকার ? তার অর্থ কি, যদি আপনার 1000 সমবর্তী ব্যবহারকারী থাকে, আপনার পিএইচপি স্ক্রিপ্টের 1000 সমবর্তী দৃষ্টান্তগুলি আপনার 1,000 টি পৃথক থ্রেডে চলছে? এটা কি সম্ভব? এবং, আপনি কীভাবে জানতে পারবেন কখন পিএইচপি স্ক্রিপ্টটি শেষ করবেন (ধরে নিবেন এটি "বেঁচে থাকার জন্য লুপিং করছে)?
mattstuehler

-7

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

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

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


4
আপনি Reode.php মূলত একইভাবে নোড.জেএস-তে ইভেন্ট-লুপের মতো ব্যবহার করতে পারেন।
Matěj Koub 7k

4
যদিও এটি বলা ভাল যে পিএইচপি সর্বোত্তম পছন্দ নয়, আমি মনে করি আপনার কমপক্ষে ওপি-র কাছে জিজ্ঞাসিত কিছু অন্তর্ভুক্ত করা উচিত।
নিশ্চল গৌতম
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.