2015-11-02 12 views
14

में सरल वेबस्केट कार्यान्वयन मुझे क्लाइंट और मेरी लैरावेल वेबसाइट के रूप में सर्वर के रूप में मेरे फोनगैप ऐप के बीच डेटा सिंक्रनाइज़ेशन प्रक्रिया को लागू करने के लिए लैरावेल में बहुत सरल और बहुत ही बुनियादी वेबसाइकिल लागू करने की आवश्यकता है। मैंने जावास्क्रिप्ट को कार्यान्वित करने और परीक्षण करने के लिए इस ट्यूटोरियल http://www.binarytides.com/websockets-php-tutorial/ का पालन किया और यह काम करता है। इस तरह मुझे बहुत सरल लार्वा कार्यान्वयन की आवश्यकता है जहां मैं जेएस क्लाइंट से अपने नियंत्रक विधि को कॉल कर सकता हूं। ग्राहक मेरा फोनगाप एप्लीकेशन होगा। मुझे ट्यूटोरियल के साथ लार्वेल में वेबस्केट के लिए कुछ पैकेज मिले, लेकिन मुझे उन्हें लागू करना मुश्किल हो गया। कोई भी नियंत्रकों के साथ बातचीत नहीं कर रहा था, वे घटनाओं को सुन रहे थे और यहां और वहां कक्षाएं बना रहे थे लेकिन नियंत्रकों में नहीं। मैंने नियंत्रक में अपना पूरा तर्क लिखा है और इसे AJAX अनुरोध के साथ परीक्षण किया है, लेकिन अब मैं इसे वेबसाकेट द्वारा कार्यान्वित करूँगा क्योंकि मुझे सिंक्रनाइज़ेशन प्रक्रिया को लागू करने के लिए द्विपक्षीय संचार की आवश्यकता है। मैं लार्वेल के लिए नया हूँ इसलिए कृपया मुझे कुछ मदद दें। यह भी बहुत अच्छा होगा अगर कोई मुझे बता सकता है कि लार्वेल में ट्यूटोरियल के बारे में कैसे एकीकृत किया जाए ताकि क्लाइंट सीधे डेटा भेजने के लिए नियंत्रक को कॉल कर सके।लार्वेल 5

+0

मेरी सिफारिश सॉकेट सर्वर को एक नोड सर्वर के तहत चलाने के लिए है। –

+0

मैं क्लाइंट साइड पर सरल जेएस सॉकेट का उपयोग करना चाहता हूं जो उपलब्ध है। क्योंकि यह फोनगैप के साथ काम करेगा क्योंकि मैं चीजों को सरल रखना चाहता हूं। – hassan

+0

वास्तव में socket.io का उपयोग करके आपको कोड की बहुत कम पंक्तियों के साथ एक वेबसाइटकेट कनेक्शन मिलेगा। इस तरह मैंने इसे व्यक्तिगत रूप से कार्यान्वित किया। –

उत्तर

18

मैं brainboxlabs के brainsocket (https://github.com/BrainBoxLabs/brain-socket) का उपयोग करके समाप्त हुआ। चूंकि इसका दस्तावेज़ इसके लार्वेल 4 पैकेज का कहना है लेकिन यह किसी भी मुद्दे के बिना लार्वेल 5 के साथ भी काम करता है।

इस पैकेज को लार्वेल के साथ स्थापित करने के लिए 5. उपरोक्त जिथब लिंक पर दस्तावेज़ का पालन करें। जहां यह ऐप फ़ोल्डर और कुछ घटनाओं से संबंधित कोड में event.php फ़ाइल बनाने के लिए कहता है। इस चरण के बजाय ऐप/प्रदाता/EventServiceProvider.php फ़ाइल में उस ईवेंट से संबंधित कोड को बस जोड़ें। अपने बूट विधि में, कि कोड है जो अनुप्रयोग में

require app_path().'/filters.php'; 
require app_path().'/events.php'; 

जोड़ने का एक कदम था है

Event::listen('generic.event',function($client_data){ 
    return BrainSocket::message('generic.event',array('message'=>'A message from a generic event fired in Laravel!')); 
}); 

Event::listen('app.success',function($client_data){ 
    return BrainSocket::success(array('There was a Laravel App Success Event!')); 
}); 

Event::listen('app.error',function($client_data){ 
    return BrainSocket::error(array('There was a Laravel App Error!')); 
}); 

इस कदम के बाद जोड़ें/शुरू/global.php। आप लार्वेल 5 के लिए यह कदम छोड़ सकते हैं।

ठीक है तो वेब सॉकेट लागू किया गया है। आप artisan brainsocket:start कमांड चलाकर cmd का उपयोग कर websocket सर्वर शुरू करके परीक्षण कर सकते हैं। आप वैकल्पिक रूप से इसे बंदरगाह कारीगर मस्तिष्क प्रदान कर सकते हैं: 9000

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

विक्रेता में \ brainboxlabs \ मस्तिष्क सॉकेट \ src \ BrainSocket \ BrainSocketServer.php मैं विधि में कोड "शुरू" और की जगह संपादित

$this->server = IoServer::factory(
      new HttpServer(
       new WsServer(
        new BrainSocketEventListener(
         new BrainSocketResponse(new LaravelEventPublisher()) 
        ) 
       ) 
      ) 
      , $port 
     ); 

$this->server = IoServer::factory(
      new HttpServer(
       new WsServer(
       new \FMIS\Http\Controllers\SynchronizationController(
        new BrainSocketResponse(new LaravelEventPublisher()) 
              ) 
       ) 
      ) 
      , $port 
     ); 

साथ और मेरे SynchronizationController फ़ाइल में ।

मैं शीर्ष

use Ratchet\MessageComponentInterface; 
use Ratchet\ConnectionInterface; 
use BrainSocket\BrainSocketResponseInterface; 
इस तरह

कार्यान्वित इंटरफ़ेस पर इसकी गयी।

class SynchronizationController extends Controller implements MessageComponentInterface{ 

और इस इंटरफेस के तरीकों को लागू किया।

public function __construct(BrainSocketResponseInterface $response) { 
     $this->clients = new \SplObjectStorage; 
     $this->response = $response; 
} 

public function onOpen(ConnectionInterface $conn) { 
     echo "Connection Established! \n"; 
} 


public function onMessage(ConnectionInterface $conn, $msg){ 
echo "this messge gets called whenever there is a messge sent from js client"; 
} 

public function onClose(ConnectionInterface $conn) { 
    echo "Connection {$conn->resourceId} has disconnected\n"; 
} 

public function onError(ConnectionInterface $conn, \Exception $e) { 
     $msg = "An error has occurred: {$e->getMessage()}\n"; 
     echo $msg; 
     $conn->close(); 
} 

आपको अपनी कार्यक्षमता को लागू करने के लिए इन विधियों में बदलाव करना होगा। इसके बाद आप अपने जेएस क्लाइंट से कॉल कर सकते हैं।और आपको इसकी जेएस लाइब्रेरी का उपयोग करने की आवश्यकता नहीं है। आप इस ट्यूटोरियल http://www.binarytides.com/websockets-php-tutorial/ में जेएस क्लाइंट का वर्णन करके डेटा भेजते हैं।

मुझे बताएं कि किसी को इसके क्रियान्वयन के संबंध में और मदद की आवश्यकता है या नहीं।

+0

दोस्त, अद्भुत स्पष्टीकरण। +1। मैं सोच रहा था कि विक्रेता में फाइल को वास्तव में संशोधित किए बिना नियंत्रक का उपयोग करना संभव है? ताकि लार्वा अद्यतन स्वतंत्र रूप से स्थापित किया जा सके। आपकी सहायता के लिए धन्यवाद. – Learner

+0

@Learner आप कस्टम सॉकेट क्लास और कमांड बना सकते हैं जो मस्तिष्क सॉकेट कक्षाओं को बढ़ाता है। यह खुद नहीं किया लेकिन इसे देखकर मैं यही करूँगा। – sourRaspberri

+0

दुर्भाग्य से ब्रेनसॉकेट ने अपने स्रोत को लैरवेल 5.5 के साथ काम करने के लिए अपडेट नहीं किया है ... – AmjadoV

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