सर्वर द्वारा भेजे गए ईवेंट और php - क्या सर्वर पर ईवेंट को ट्रिगर करता है?


91

सब,

HTML5 रॉक्स में सर्वर द्वारा भेजे गए घटनाओं (SSE) पर एक अच्छा शुरुआत ट्यूटोरियल है:

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

लेकिन, मुझे एक महत्वपूर्ण अवधारणा समझ में नहीं आती है - क्या उस सर्वर पर घटना को ट्रिगर करता है जो संदेश भेजने का कारण बनता है?

दूसरे शब्दों में - HTML5 उदाहरण में - सर्वर केवल एक बार टाइमस्टैम्प भेजता है :

<?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()));

यदि मैं एक व्यावहारिक उदाहरण का निर्माण कर रहा था - उदाहरण के लिए, एक फेसबुक-शैली "दीवार" या स्टॉक-टिकर, जिसमें सर्वर हर बार क्लाइंट को एक नया संदेश "पुश" करेगा, जब कोई डेटा परिवर्तन होता है, तो वह कैसे काम करता है?

दूसरे शब्दों में ... क्या PHP स्क्रिप्ट में एक लूप होता है जो लगातार चलता रहता है, डेटा में बदलाव के लिए जाँच करता है, फिर हर बार एक संदेश भेजने पर यह एक मिल जाता है? यदि हां - तो आप कैसे जानते हैं कि उस प्रक्रिया को कब समाप्त करना है?

या - क्या PHP स्क्रिप्ट केवल संदेश भेजती है, फिर अंत (जैसा कि HTML5Rocks उदाहरण में मामला प्रतीत होता है)? यदि हां - तो आपको लगातार अपडेट कैसे मिलते हैं? क्या ब्राउज़र नियमित अंतराल पर केवल PHP पृष्ठ को मतदान कर रहा है? यदि हां - तो यह "सर्वर द्वारा भेजी गई घटना" कैसे है? यह जावास्क्रिप्ट में setInterval फ़ंक्शन लिखने से कैसे अलग है जो नियमित अंतराल पर PHP पेज को कॉल करने के लिए AJAX का उपयोग करता है?

क्षमा करें - यह शायद एक अविश्वसनीय भोला सवाल है। लेकिन कोई भी उदाहरण मुझे नहीं मिला है जो इसे स्पष्ट कर सके।

[अपडेट करें]

मुझे लगता है कि मेरा प्रश्न खराब था, इसलिए यहां कुछ स्पष्टीकरण दिया गया है।

मान लीजिए कि मेरे पास एक वेब पेज है, जिसे ऐप्पल के स्टॉक की सबसे नवीनतम कीमत प्रदर्शित करनी चाहिए।

जब उपयोगकर्ता पहली बार पृष्ठ खोलता है, तो पृष्ठ मेरे "स्ट्रीम" के URL के साथ एक EventSource बनाता है।

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?

मेरी अनुभवहीन धारणा यह है कि, यदि यह मामला है, तो PHP इस तरह के सर्वर के लिए उपयुक्त तकनीक नहीं है। लेकिन सभी डेमो मैंने अभी तक स्पष्ट रूप से देखा है कि PHP इसके लिए ठीक है, यही वजह है कि मैं इतना भ्रमित हूं ...


यह वह हिस्सा है जिसे एक डेवलपर को स्वयं कोड करना होगा। डेटा प्राप्त करने के साधन वेबसोकेट्स / लॉन्ग पोलिंग आदि के माध्यम से होते हैं, हालांकि ट्रिक वह होती है जो इवेंट को ट्रिगर करती है। व्यक्तिगत रूप से, मैं और एक दृष्टिकोण है कि मैं इसे पसंद किया कुछ दृष्टिकोण के साथ प्रयोग किया गया है (लेकिन यह नहीं था कि असफल-सुरक्षित) किया गया था MySQL ट्रिगर एक सांत्वना कार्यक्रम हर बार कुछ एक विशिष्ट तालिका में सम्मिलित किया गया था बना रही है। कंसोल प्रोग्राम बदले हुए / सम्मिलित रिकॉर्ड के बारे में जानकारी प्राप्त करेगा और यह वेबसॉकेट के माध्यम से संबंधित उपयोगकर्ता को सूचना भेजेगा। मूल रूप से मेरे पास एक PHP डेमॉन था जो चारों ओर संदेश भेजने के लिए इंतजार कर रहा था।
NB

इसके साथ एक समस्या, SSE IE द्वारा समर्थित नहीं है: - / इसके अलावा मैं इस prodigyproductionsllc.com/articles/programming/javascript/ को पढ़ूंगा। मुझे लगता है कि वह बहुत से बच्चों की समस्या से बचने के लिए एक बंदरगाह का उपयोग कर रहा है - कुल मिलाकर उसकी तरह दिखता है सिफारिश एसएसई से बचने के लिए है। जिस तरह से यह मूल्य से अधिक परेशानी की तरह लग रहा है, IMO।
पीजे ब्रूनेट

वर्तमान में IE11 या Android ब्राउज़र द्वारा समर्थित नहीं है caniuse.com/eventsource
PJ Brunet

1
अगर किसी को sse php कोड की आवश्यकता है: github.com/shahzadthathal/server-sent-events-php-example
मुहम्मद शहजाद

4
मैं एक ही सवाल था और मुझे लगता है कि मैं गहराई से समझते हैं कि आप द्वारा क्या मतलब है क्या सर्वर पर ईवेंट ट्रिगर करता है ... । जब आप एक ऑब्जेक्ट बनाते हैं EventSource('stream.php'), तो क्लाइंट एक कनेक्शन खोलता है stream.phpजिसके साथ इसे अजाक्स द्वारा कॉल करना पसंद है। यह कनेक्शन आपके सर्वर साइड कोड को ट्रिगर करता है और जब तक आपके सर्वर साइड कोड में कुछ कहने के लिए कनेक्शन खुला रहता है। फिर कनेक्शन बंद हो जाता है और थोड़ी देरी के बाद (क्रोम में 3 सेकंड मुझे लगता है) क्लाइंट उस कनेक्शन को फिर से खोल देता है जो आपकी stream.phpफाइल को फिर से चलाता है ।
अहमद मालेकी

जवाबों:


28

"..." स्ट्रीम। एफपी "तब तक खुला रहता है जब तक क्लाइंट" इससे "जुड़ा हुआ है?"

हां, और आपका छद्म कोड एक उचित दृष्टिकोण है।

"और आप कैसे जानते हैं कि आप स्ट्रीम का एक उदाहरण END। END कर सकते हैं?"

सबसे विशिष्ट मामले में, यह तब होता है जब उपयोगकर्ता आपकी साइट को छोड़ देता है। (अपाचे बंद सॉकेट को पहचानता है, और PHP उदाहरण को मारता है।) सर्वर-साइड से सॉकेट बंद करने का मुख्य समय यदि आप जानते हैं कि थोड़ी देर के लिए कोई डेटा नहीं है; अंतिम संदेश जो आप ग्राहक को भेजते हैं, वह उन्हें एक निश्चित समय पर वापस आने के लिए कहता है। जैसे आपके स्टॉक-स्ट्रीमिंग मामले में, आप 8pm पर कनेक्शन बंद कर सकते हैं, और ग्राहकों को 8 घंटे में वापस आने के लिए कह सकते हैं (यह मानते हुए कि NASDAQ 4am से 8pm के उद्धरण के लिए खुला है)। शुक्रवार की शाम आप उन्हें सोमवार सुबह वापस आने के लिए कहेंगे। (मेरे पास एसएसई पर एक आगामी पुस्तक है, और इस विषय पर कुछ अनुभागों को समर्पित करें।)

"... अगर यह मामला है, तो PHP इस तरह के सर्वर के लिए एक उपयुक्त तकनीक नहीं है। लेकिन मैंने जितने डेमो देखे हैं, उन सभी का मतलब है कि PHP सिर्फ इसके लिए ठीक है, यही कारण है कि मैं ऐसा हूं उलझन में ... "

ठीक है, लोग तर्क देते हैं कि PHP सामान्य वेब साइटों के लिए उपयुक्त तकनीक नहीं है, और वे सही हैं: यदि आप C ++ के साथ अपने पूरे LAMP स्टैक को बदल देते हैं, तो आप इसे बहुत कम मेमोरी और CPU चक्रों के साथ कर सकते हैं। हालांकि, इसके बावजूद, PHP की साइटें वहां से अधिकांश साइटों को ठीक करती हैं। यह वेब काम के लिए एक बहुत ही उत्पादक भाषा है, एक परिचित सी-जैसे सिंटैक्स और इतने सारे पुस्तकालयों के संयोजन के कारण, और प्रबंधकों के लिए एक आराम देने वाला है क्योंकि पीएचपी प्रोग्रामर के लिए बहुत सारी किताबें और अन्य संसाधन, और कुछ बड़े उपयोग के मामले (जैसे फेसबुक और विकिपीडिया)। वे मूल रूप से वही कारण हैं जो आप पीएचपी को अपनी स्ट्रीमिंग तकनीक के रूप में चुन सकते हैं।

विशिष्ट सेटअप NASDAQ प्रति PHP-इंस्टेंस के लिए एक कनेक्शन नहीं होने जा रहा है। इसके बजाय आप NASDAQ के एकल कनेक्शन के साथ एक और प्रक्रिया या शायद अपने क्लस्टर में प्रत्येक मशीन से एक एकल कनेक्शन NASDAQ के लिए जा रहे हैं। इसके बाद कीमतें SQL / NoSQL सर्वर या साझा मेमोरी में धकेल देती हैं। तब PHP सिर्फ उस साझा मेमोरी (या डेटाबेस) को पोल करता है, और डेटा को बाहर धकेलता है। या, एक डेटा-एकत्रित सर्वर है, और प्रत्येक PHP उदाहरण उस सर्वर के लिए एक सॉकेट कनेक्शन खोलता है। डेटा-एकत्रित करने वाला सर्वर अपने प्रत्येक PHP क्लाइंट के अपडेट को पुश करता है, क्योंकि यह उन्हें प्राप्त करता है, और वे बदले में उस डेटा को अपने क्लाइंट को धक्का देते हैं।

स्ट्रीमिंग के लिए Apache + PHP का उपयोग करने के साथ मुख्य स्केलेबिलिटी समस्या प्रत्येक अपाचे प्रक्रिया के लिए मेमोरी है। जब आप हार्डवेयर की मेमोरी सीमा तक पहुंच जाते हैं, तो क्लस्टर में किसी अन्य मशीन को जोड़ने के लिए व्यवसाय निर्णय लें, या Apache को लूप से काट दें, और एक समर्पित HTTP सर्वर लिखें। उत्तरार्द्ध PHP में किया जा सकता है, इसलिए आपके सभी मौजूदा ज्ञान और कोड का फिर से उपयोग किया जा सकता है, या आप किसी अन्य भाषा में पूरे आवेदन को फिर से लिख सकते हैं। मुझ में शुद्ध डेवलपर C ++ में एक समर्पित, सुव्यवस्थित HTTP सर्वर लिखेगा। मुझ में प्रबंधक एक और बॉक्स जोड़ देगा।


जैसा कि प्रत्येक अपाचे कनेक्शन प्रक्रिया मेमोरी का उपभोग करती है, क्या इसके बजाय नग्नेक्स का उपयोग करना बेहतर होगा?
झांग बज़

@ZhangBuzz जहाँ मैंने Apache + PHP कहा है, इसका वास्तव में अर्थ है "वेब-सर्वर + PHP प्रक्रिया", इसलिए मूल रूप से भिन्न वेब सर्वर का उपयोग करने से कोई अंतर नहीं पड़ता है।
डैरेन कुक

शायद सर्वर इन जैसे? github.com/hoaproject/Eventsource या github.com/hhxsv5/php-sse
Enrique

यह भी ध्यान दें कि इसके लिए Nginx अधिक कुशल हो सकती है क्योंकि कम मेमोरी का उपयोग करें: blog.webfaction.com/2008/12/…
Enrique

31

सर्वर द्वारा भेजी जाने वाली घटनाएं सर्वर-साइड से क्लाइंट-साइड तक रियलटाइम अपडेट के लिए होती हैं। पहले उदाहरण में, सर्वर से कनेक्शन नहीं रखा गया है और क्लाइंट हर 3 सेकंड में फिर से कनेक्ट करने की कोशिश करता है और सर्वर द्वारा भेजे जाने वाले ईवेंट को अजाक्स पोलिंग में कोई फर्क नहीं पड़ता है।

इसलिए, कनेक्शन को बनाए रखने के लिए, आपको अपने कोड को लूप में लपेटना होगा और लगातार अपडेट के लिए जांचना होगा।

PHP थ्रेड-आधारित है और अधिक कनेक्ट किए गए उपयोगकर्ता सर्वर को संसाधनों से बाहर चलाएंगे। यह स्क्रिप्ट निष्पादन समय को नियंत्रित करके हल किया जा सकता है और समय की मात्रा (यानी 10mins) से अधिक होने पर स्क्रिप्ट को समाप्त कर सकता है। EventSourceAPI स्वचालित रूप से फिर से कनेक्ट करेगा तो देरी एक स्वीकार्य सीमा में है।

इसके अलावा, सर्वर द्वारा भेजी जाने वाली घटनाओं के लिए मेरी पीएचपी लाइब्रेरी देखें , आप पीएचपी में सर्वर द्वारा भेजी जाने वाली घटनाओं को कैसे करें और इसे कोड करना आसान बना सकते हैं।


5
क्या आप "इसका निष्पादन स्क्रिप्ट के निष्पादन समय को नियंत्रित करके और जब यह समय की मात्रा से अधिक हो तो स्क्रिप्ट को समाप्त कर सकते हैं" पर किया जा सकता है? यदि आपके पास उपयोगकर्ताओं की अधिक संख्या है, तो क्या यह वास्तव में कनेक्शन को बंद करके संसाधन उपयोग में सुधार करेगा क्योंकि उपयोगकर्ता केवल 3 सेकंड में फिर से कनेक्ट होगा?
ल्यूक

4

मैंने देखा है कि sse techink क्लाइंट को विलंबित डेटा के प्रत्येक जोड़े को भेजता है (क्लाइंट पेज से Ajax पूलिंग डेटा से पूलिंग डेटा techink को उलटने के समान है।) इसलिए इस समस्या को दूर करने के लिए मैंने इसे sseSverver.php पृष्ठ पर बनाया है:

<?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 पर मैं एक सत्र शुरू करता हूं और सत्र चर का उपयोग करता हूं! समस्या को दूर करने के लिए।

variable messageहर बार जब मैं "मैसेज" अपडेट करना चाहता हूं तो मैं Ajax (पोस्टिंग और सेट वैल्यू ) के माध्यम से sseServer.php पर कॉल करता हूं ।

अब jQuery (जावास्क्रिप्ट) पर मैं ऐसा कुछ करता हूं: 1) मैं एक वैश्विक चर var timeStamp = 0 घोषित करता हूं ; 2) मैं अगले एल्गोरिथ्म का उपयोग करता हूं:

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 तालिका का उपयोग कर सकते हैं क्योंकि sseServer.php एक "अनंत लूप" जैसा कुछ करता है।

उस समय मेरी समस्या यह है कि उपरोक्त कोड सभी ग्राहकों के लिए "संदेश" नहीं भेजता है, लेकिन केवल उस जोड़ी (क्लाइंट जिसे sseServer.php हर जोड़ी के लिए व्यक्तिगत रूप से काम करता है) को कहते हैं, इसलिए मैं तकनीकी और को बदल दूंगा डीबी अपडेट उस पृष्ठ से करता है जिसे मैं "संदेश" को ट्रिगर करना चाहता हूं और फिर पोस्ट के माध्यम से संदेश प्राप्त करने के बजाय sseServer.php यह DB तालिका से प्राप्त करेगा।

मुझे आशा है कि मुझे मदद मिलेगी!


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);

यह सबसे सुंदर उदाहरण नहीं है, लेकिन इसे एक सभ्य इमारत ब्लॉक के रूप में काम करना चाहिए। आप इन घटनाओं को ट्रिगर करने के लिए अपनी वास्तविक दृढ़ता परत में हुक कर सकते हैं। फिर आप उन्हें अपने सर्वर को बिना झूला किए बिना तुरंत (वास्तविक समय के अनुसार प्राप्त कर सकते हैं) (क्योंकि आपको लगातार अपने डेटाबेस को क्वेरी करने और यह देखने की ज़रूरत नहीं है कि चीजें बदल गई हैं)।

आप स्पष्ट रूप से इस तरह से डेटाबेस में मैन्युअल परिवर्तन नहीं पकड़ेंगे - लेकिन अगर आप अपने डेटाबेस में किसी भी आवृत्ति के साथ मैन्युअल रूप से कुछ भी कर रहे हैं, तो आपको या तो करना चाहिए:

  • उस समस्या को ठीक करें जिसके लिए आपको मैन्युअल बदलाव करना होगा
  • प्रक्रिया को तेज करने के लिए एक उपकरण बनाएं, और इन घटनाओं को आग दें

3
कॉलिन - आपके उत्तर के लिए धन्यवाद। मेरी गलती - मेरा सवाल स्पष्ट नहीं है - लेकिन यह वास्तव में मैं क्या पूछ रहा हूँ नहीं है। मेरे कहने का मतलब यह है कि ... यदि आप अपने "सर्वर" के रूप में PHP का उपयोग कर रहे हैं - तो क्या आपके क्लाइंट में जो Event स्क्रिप्ट आपके द्वारा कॉल की जाती है, उसके लिए PHP स्क्रिप्ट की आवश्यकता होती है, जब क्लाइंट इससे जुड़ा होता है? इसका मतलब यह होगा कि, यदि आपके पास 1,000 समवर्ती उपयोगकर्ता हैं, तो आपके पास 1,000 अलग-अलग धागे हैं जो आपके PHP स्क्रिप्ट के 1,000 समवर्ती उदाहरणों को चला रहे हैं? क्या यह संभव है? और, आपको कैसे पता चलेगा कि php स्क्रिप्ट कब खत्म होगी (यह मानते हुए कि यह "जीवित" रहने के लिए लूपिंग है)?
मैटस्ट्यूहलर

-7

मूल रूप से, PHP इस तरह की चीजों के लिए उपयुक्त टेक्नोलोजी नहीं है। हां आप इसे काम कर सकते हैं, लेकिन यह उच्च भार पर एक आपदा होगी। हम दर्जनों ऐसे उपयोगकर्ताओं के लिए वेबसैट के माध्यम से स्टॉक-चेंज सिग्नल भेजते हैं, जो दर्जनों उपयोगकर्ताओं को भेजते हैं - और यदि हम इसके लिए php का उपयोग करते हैं ... ठीक है, हम कर सकते हैं, लेकिन उन घर का बना चक्र - बस एक बुरा सपना है। हर एक कनेक्शन सर्वर पर एक अलग प्रक्रिया करेगा या आपको किसी प्रकार के डेटाबेस से कनेक्शन को संभालना होगा।

बस नोड्स और सॉकेट का उपयोग करें। यह आपको आसानी से शुरू करने देगा और कुछ दिनों में एक रनिंग सर्वर होगा। Nodejs की अपनी सीमाएँ भी हैं, लेकिन वेबसैट (और SSE) कनेक्शन के लिए अब इसकी सबसे शक्तिशाली तकनीक है।

और यह भी - एसएसई उतना अच्छा नहीं है जितना लगता है। Websockets का एकमात्र लाभ - यह है कि पैकेटों को देशी रूप से gzipped किया जा रहा है (ws gzipped नहीं है), लेकिन नकारात्मक पक्ष यह है कि SSE एक तरफा कनेक्शन है। आप उपयोगकर्ता, यदि वह सबस्क्रिप्ट के लिए एक और स्टॉक प्रतीक जोड़ना चाहता है, तो उसे ऐजेक्स अनुरोध करना होगा (मूल नियंत्रण के साथ सभी परेशानियों और अनुरोध धीमा होगा)। वेबसोकेट क्लाइंट में और एक ही खुले कनेक्शन में दोनों तरीके से संचार करते हैं, इसलिए यदि उपयोगकर्ता ट्रेडिंग सिग्नल भेजता है या उद्धरण के लिए सदस्यता लेता है, तो वह पहले से ही खुले कनेक्शन में एक स्ट्रिंग भेजता है। और यह तेज है।


2
आप React.php को मूल रूप से उसी तरह से उपयोग कर सकते हैं जैसे कि नोड में ।js.
Mat --j Koubík

3
हालांकि यह बताना अच्छा है कि PHP सबसे अच्छा विकल्प नहीं है, मुझे लगता है कि आपको कम से कम ओपी के लिए कहा गया कुछ भी शामिल करना चाहिए।
निश्चल गौतम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.