2013-09-23 6 views
27

मुझे लार्वेल 4 में लिखा गया एक वेबप्लिकेशन मिला है। यह एप्लिकेशन रैचेट का उपयोग करता है और अधिक विशिष्ट होने के लिए, यह पैकेज Latchet का उपयोग करता है। एक sidenote के रूप मैं निम्नलिखित तकनीकों का उपयोग कर रहा हूँ:websockets का उपयोग करते समय सबसे अच्छा अभ्यास?

अब मैं इस परिदृश्य पर मिल गया:

  • मैं एक स्लाइड शो है जो होना चाहिए है वेबसाइकिल के माध्यम से अद्यतन प्राप्त करें।
  • पूरा एप्लिकेशन सेटअप है और मैं PHP से अपने वेबस्केट क्लाइंट में ZeroMq के माध्यम से नए कोड परिवर्तन प्रकाशित कर सकता हूं।

    //routes.php 
    // Setup a connection and register a topic where clients can connect to. 
    Latchet::connection('Connection'); 
    Latchet::topic('PhotoStream/{client}', 'PhotoStreamController'); 
    
  • फिर, मैं रैशे सर्वर प्रारंभ:

  • मेरी routes.php में, मैं इतना है कि एक विषय को सही ढंग से पंजीकृत है, निम्नलिखित कोड है।

sudo php artisan latchet:listen

एक फ़ोटो अपलोड किया जाता है, मैं तो उस (इस मामले में PhotoStream/client1) मेरे विषय से सुन रहे हैं ग्राहकों को अपडेट पुश करने के लिए निम्न कोड चला सकते हैं:

// Create the object, save it to db and then publish it to my websockets 
$photo = new Photo; 
$photo->location = 'path/to/file'; 
$photo->save(); 
// Publish it through my websocket clients. (push from server). 
Latchet::publish('PhotoStream/client1', array('msg' => $photo->toArray())); 

यह कोड सभी काम करता है, लेकिन यह एक अद्यतन के मामले में है। मेरा प्रश्न निम्नानुसार है:

मुझे क्लाइंट की प्रारंभिकरण को कैसे संभालना चाहिए?

  1. क्या मुझे पहले सादे पुराने PHP के साथ पृष्ठ प्रस्तुत करना चाहिए और फिर मेरे वेबसाकेट क्लाइंट को प्रारंभ करना चाहिए जो तब और अपडेट प्राप्त करता है (यदि कोई है)?
  2. या जब मैं एक नया वेबसाईट क्लाइंट पंजीकृत करता हूं, तो मुझे अनुरोध के साथ अतिरिक्त पैरामीटर देना चाहिए ताकि सर्वर मुझे websockets के माध्यम से पूरा डेटा भेज सके?

दो विकल्पों के उत्तरार्द्ध मेरे लिए सबसे अच्छा विकल्प लगता है लेकिन मुझे वास्तव में यह नहीं पता कि इसे एक अच्छे तरीके से कैसे कार्यान्वित किया जाए। (प्रारंभिक सूची प्राप्त करने के)

//session.subscribe(....) 

session.call('route/to/controller', arg1, arg2).then(function(res) { 
    console.log(res) //initial collection of photos 
}); 

php तरफ:

+0

मेरी इच्छा है कि आपको और जवाब मिलें। मैं लार्वेल के साथ websockets लागू करने की अपनी यात्रा शुरू कर रहा हूँ; मुझे थोड़ा पता है लेकिन मेरी खोज जारी है। –

+0

निश्चित रूप से मुझे अद्यतन रखें! –

+0

खैर, निश्चित रूप से ब्रेन सॉकेट का उपयोग न करें। वे कहते हैं कि वे v1.0 पर हैं, लेकिन सर्वर को धक्का देना असंभव है। जब मैं एक और सॉकेट प्लगइन कोशिश करता हूं तो मैं वापस जांच करूंगा। –

उत्तर

5

जावास्क्रिप्ट तरफ (प्रारंभिक सूची प्राप्त करने के)

public function call($connection, $id, $topic, $params) { 
    //the id is needed to be able to trace your async calls back to the right promise 
    $connection->callResult($id, $this->getInitialPhotosFilteredByParams($params)); 
}); 

जब से तुम पहले से ही सफलतापूर्वक के माध्यम से सदस्यता लें अपडेट मिल गया, यह सब आपको चाहिए हालांकि xss के लिए देखें, पैरा को फ़िल्टर नहीं किया जा सकता है।

0

यदि आपके प्रश्न को सही तरीके से समझ लिया गया है तो यह है: आप सोच रहे हैं कि वेबस्केट पर छवियां भेजना एक अच्छा विचार है यदि उन छवियों को प्रीलोडेड फॉर्म PHP भी हो सकता है।

मैं आपको वेबसाईट का उपयोग किये बिना छवियों को प्रीलोड करने के लिए PHP का उपयोग करने का सुझाव दूंगा और एक बार नई छवियों को जोड़ने के बाद सॉकेट का उपयोग करना शुरू कर दूंगा।

इस तरह उपयोगकर्ता को पेज लोड होने के पल से छवियों को देखना चाहिए और उन्हें वेबस्केट कनेक्शन स्थापित करने की प्रतीक्षा नहीं करनी पड़ेगी।

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

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