2010-12-21 9 views
7

मैं सोच रहा हूं कि PHP के साथ "सत्य" (अर्द्ध) वास्तविक समय डेटा स्ट्रीमिंग कैसे करें।PHP में रीयल-टाइम डेटा स्ट्रीमिंग (क्रॉस-प्लेटफॉर्म) के लिए सर्वश्रेष्ठ दृष्टिकोण?

संभावित अनुप्रयोगों: चैट रूम, नीलामी, खेल, आदि

तक "सही", मेरा मतलब है डेटा बस कहीं नहीं लिखा है और लगातार सर्वेक्षण में शामिल है, लेकिन वास्तव में किसी भी तरह ग्राहक के लिए स्ट्रीमिंग।

"अर्द्ध" द्वारा, मेरा मतलब है कि यह ठीक है अगर सर्वर से क्लाइंट तक स्ट्रीम वास्तविक समय है, और क्लाइंट से सर्वर पर संदेश नहीं हैं।

क्लाइंट और सर्वर के बीच संचार के लिए, मैं कुछ अन्य प्रोटोकॉल के बजाय सादे HTTP (AJAX) के साथ चिपकना चाहता हूं।

HTTP के साथ क्लाइंट को स्ट्रीमिंग मैन्युअल रूप से आउटपुट बफर को फ़्लश करके संभव है।

सवाल यह है कि उस स्क्रिप्ट को सर्वर-साइड से कनेक्ट करना क्या है?

और एक बार यह कनेक्ट हो जाने के बाद, परिवर्तनों के मतदान के बजाए अवरुद्ध पढ़ने के लिए।

साझा स्मृति (shmop) एक्सटेंशन काम करेगा, लेकिन यह क्रॉस-प्लेटफॉर्म नहीं है।

शायद memcached काम करेगा? लेकिन मुझे यकीन नहीं है कि अवरोधन पढ़ने का कोई तरीका है, इसलिए यह फिर से मतदान करने के लिए नीचे आता है - हालांकि मुझे यकीन है कि memcached बहुत तेज़ है, मुझे लगातार मतदान के विचार पसंद नहीं हैं।

कोई विचार?

+0

मैं धक्का मतलब यह नहीं है:

एक वास्तविक समय ट्विटर धारा लागू करने के लिए इस ट्यूटोरियल देखें और इसे लिखें, और वर्तमान में उस धारा/चीज़ से जुड़ी कोई अन्य स्क्रिप्ट ब्लॉकिंग मोड में इसे पढ़ सकती है, और उसके बाद परिणाम लगातार चल रहे HTTP अनुरोध और फ्लश पर लिख सकते हैं। –

उत्तर

5

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

कहा कि, मैं अत्यधिक NodeJS बाहर की जाँच की सिफारिश करेंगे: http://nodejs.org/

यह के लिए एक अतुल्यकालिक घटना आधारित मॉडल का उपयोग करता आई/ओ के बजाय होने धागे एक घटना पाश में ब्लॉक। नोडजेएस सर्वर जावास्क्रिप्ट में लिखे गए हैं। नोडजेएस तेज, तराजू है, और कम सीखने की वक्र है।

ग्राहक लंबी मतदान अजाक्स अनुरोधों का उपयोग करके एक नोडजेएस HTTP सर्वर से कनेक्ट होंगे। PHP सीधे नोडजेएस से कनेक्ट हो सकता है और नोटिफिकेशन पुश कर सकता है। या PHP एक संदेश कतार, या डेटाबेस, memcache आदि को लिख सकता है, और नोडजेएस अद्यतन के लिए उन डेटा स्टोरों को मतदान करेगा, और ग्राहकों को नए संदेश भेज देगा।

अपडेट के लिए मतदान करते समय आपको नोडजेएस से MySQL, memcached, आदि के बीच जाने के लिए अपना खुद का डिमन लिखने की आवश्यकता होगी। नोडजेएस एक डेमॉन प्रक्रिया के साथ एक सॉकेट खुला रखेगा। डिमन प्रक्रिया अद्यतन के लिए डेटा स्टोर्स को मतदान करेगी, और नोडजेएस को अपडेट भेज देगा। एक नोडजेएस HTTP सर्वर तब उन अद्यतनों को ग्राहकों को भेज देगा। सर्वर साइड पर/कुछ मैं एक धारा/पाइप/पोर्ट/चैनल खोलने के लिए किसी तरह की तलाश में हूँ - http://net.tutsplus.com/tutorials/javascript-ajax/learning-serverside-javascript-with-node-js/

+1

यह वही है जो node.js – JohnO

+6

के लिए है आप PHP धीमे होने के बारे में गलत हैं। लेकिन मुझे सहमत होना है, शायद यह इस प्रकार के समानांतर/बहु-थ्रेडेड अनुप्रयोगों के लिए डिज़ाइन नहीं किया गया था। जवाब स्वीकार किया गया। –

+0

नोडजेस एकल थ्रेडेड है और –

2

यदि आप HTML और जावास्क्रिप्ट का उपयोग कर रहे हैं, तो आप वेबसाकेट चाहते हैं। यदि यह फ़्लैश है या कुछ और, तो सामान्य टीसीपी सॉकेट।

या तो यह विचार है कि आप एक सर्वर फ़ाइल (PHP में लिखी गई) चलाते हैं, जो कनेक्शन की प्रतीक्षा करता है। एक बार यह एक या अधिक ग्राहकों से कनेक्ट हो जाने पर, डेटा दोनों तरीकों से धक्का दिया जा सकता है। वहां कुछ PHP वेबसॉकेट परियोजनाएं हैं। , हालांकि अस्थिर अवस्था में

http://code.google.com/p/phpwebsocket

वहाँ भी एक रूपरेखा कंकाल कहा जाता है कि मुझे लगता है कि करने के लिए योगदान किया गया है एक WebSocket सर्वर पुस्तकालय में बनाया गया है फिर भी: बाहर इस जाँच करें।।

http://code.google.com/p/skeleton

दुर्भाग्य से, WebSockets अभी भी एक नई तकनीक है, इसलिए वे सार्वभौमिक समर्थित नहीं कर रहे हैं। जैसा कि @ क्रिस्टियन ने उल्लेख किया है, आप सॉकेट.आईओ लाइब्रेरी का उपयोग करना चाह सकते हैं।

+1

मैं हाल ही में [Ratchet] (https://github.com/cboden/Ratchet) में आया - PHP में वेब-सॉकेट सर्वर का एक बहुत अच्छा, साफ, सरल कार्यान्वयन। –

+2

मैं इसे वापस लेता हूं - रैचेट एक अच्छा विचार है, लेकिन PHP सॉकेट सर्वर के रूप में रीयल-टाइम अनुप्रयोगों के लिए अनुपयुक्त है - [यह आलेख] (http://software-gunslinger.tumblr.com/post/47131406821/php -इस-टू-मर-मर) बताते हैं क्यों। –

0

यदि आप PHP और दूसरी भाषा (उदाहरण के लिए एक C++ एप्लिकेशन) के बीच संवाद करना चाहते हैं तो आप अपाचे थ्रिफ्ट (http://thrift.apache.org/) में देखना चाहेंगे। "स्केलेबल क्रॉस-लैंग्वेज सर्विसेज डेवलपमेंट" के लिए फेसबुक पर अपाचे थ्रिफ्ट का व्यापक रूप से उपयोग किया जाता है।

संपादित करें: मैं संभवतः Twisted एप्लिकेशन के साथ संवाद करने के लिए अपाचे थ्रिफ्ट का उपयोग करूँगा 80 पर और सुनने के लिए ब्राउज़र लंबे समय तक मतदान या वेबसाइकिल का उपयोग करके ट्विस्ट किए गए एप्लिकेशन से कनेक्ट हो। आप Socket.IO पर भी देखना चाहते हैं, यह एक क्रॉस-ब्राउज़र वेब सॉकेट कार्यान्वयन है जो रीयलटाइम अनुप्रयोगों के लिए बनाया गया है।

असल में आप अपने स्विफ्ट का उपयोग कर अपने ट्विस्ट वेब सर्वर पर अपना एप्लिकेशन धक्का देंगे और फिर आप किसी भी खुले कनेक्शन पर संदेश भेज देंगे।

  • ईसाई
+0

मुझे विश्वास नहीं है कि यह प्रयास के लायक है - PHP को इस तरह के कार्य के लिए डिज़ाइन नहीं किया गया था। यह HTTP जीवन चक्र के साथ दिमाग में बनाया गया था: एक स्टेटलेस अनुरोध/प्रतिक्रिया मॉडल। नोडजेएस रीयल-टाइम/सॉकेट अनुप्रयोगों के लिए एक बहुत ही सुरक्षित शर्त है, और भाषा अवरोध अब इतना बुरा नहीं है, जावास्क्रिप्ट को संकलित करने वाली सभी महान भाषाओं के साथ और नोड/वी 8 को वीएम के रूप में उपयोग करें। –

संबंधित मुद्दे