2017-03-29 8 views
14

समस्यासुनो कॉलबैक पुशर एपीआई Laravel में काम नहीं कर रहा 5.4

मैं पुष्टि कर सकता है कि पुशर एपीआई संदेश प्राप्त कर रहा है। मैंने पुशर वेबसाइट के डीबग कंसोल में देखा। लेकिन सुनो कॉलबैक बिल्कुल काम नहीं कर रहा है।

मैं अनुसरण कर रहा हूं this tutorial to implement Pusher in Laravel 5.4

नीचे किया कदम चीजों से कदम थे।

  1. composer require pusher/pusher-php-server
  2. npm install --save laravel-echo pusher-js
  3. env में और bootstrap.js फ़ाइल में अपने resources/assets/js/bootstrap.js
  4. प्रारंभ पुशर कुंजी में इको उदाहरण instantiated।

अंत में, मैंने ब्लेड में कोड नीचे लिखा था।

<script> 
    window.Echo.channel('SendMessageChannel.1') 
     .listen('App.Events.SendMessageEvent', (e) => { 
      console.log(e); 
     }); 
</script> 

नियंत्रक कोड

broadcast(new SendMessageEvent("Hi"))->toOthers(); 

घटना कोड

class SendMessageEvent implements ShouldBroadcast 
{ 
    use Dispatchable, InteractsWithSockets, SerializesModels; 

    public $Message; 

    public function __construct($message) 
    { 
     $this->Message = $message; 
    } 

    public function broadcastOn() 
    { 
     return new PrivateChannel('SendMessageChannel.2'); 
    } 

} 

मुझे याद आ रही कुछ भी?

+0

आप पूरी तरह से बदलने के लिए नहीं करना चाहते हैं SessionGuard। पासपोर्ट केवल आपके एपीआई मार्गों को कवर करना चाहिए। सत्रगार्ड ने किसी भी रूट को कवर किया जो HTML (वेब ​​मार्ग) देता है। फिर किसी भी जावास्क्रिप्ट कॉल को आपके एपीआई का उपयोग करना चाहिए जैसा कि "जावास्क्रिप्ट के साथ आपका एपीआई उपभोग करना"] में बताया गया है (https://laravel.com/docs/5.4/passport#consuming-your-api-with-javascript) दस्तावेज़ के अनुभाग – jfadich

+0

हाय पंकज, क्या आपको इस मुद्दे का समाधान मिला? –

+0

अभी तक, समाधान के लिए प्रतीक्षा कर रहा है। – Pankaj

उत्तर

6
  1. आपको नामस्थान के बिना SendMessageEvent सुनना होगा।
  2. जब आप एक निजी चैनल सुनने के लिए आपको private-SendmessageChannel को सुनने के लिए की जरूरत है या आप Echo.private('SendmessageChannel')

का उपयोग क्योंकि हम कुछ भागों में teamspeak के माध्यम से इस मुद्दे को fixxed यह मुश्किल है पूरे विस्तार में इस उत्तर में यह समझाने के लिए।

एक समस्या यह भी थी कि क्लाइंट इसे सुनना शुरू करने से पहले घटना को निकाल दिया गया था। सबसे अच्छा तरीका पुशर कंसोल के साथ डीबग करना और कस्टम घटनाओं को आग लगाना है।

2

मैं परियोजना के साथ 6 महीने के बाद से लैरवेल 5.4 घटनाओं का काफी कुशलता से उपयोग कर रहा हूं। जब मैं प्रारंभिक सेटअप कर रहा था तो मुझे भी यही परेशानी थी। मैं इसे काम करने के लिए जो भी किया है, उसके साथ आपको मार्गदर्शन करने देता हूं।

मैं देख सकता हूं कि आपके पास पुशरज़ को संदेश सामग्री भेजने के लिए SendMessageEvent इवेंट शुरू करने के लिए controller है। इसे जाने के लिए आपको निम्नलिखित सामग्री की जांच करनी होगी।

चेक 1:

लेकिन आप अगर आप एक eventhandler परिभाषित किया गया है उल्लेख नहीं किया है। इवेंट हैंडलर SendMessageEvent और इसके वास्तविक प्रसारक के बीच एक पुल के रूप में काम करता है। तो एक Eventhandler को परिभाषित करें जैसे app/Handlers/Events / जैसे फ़ोल्डर्स बनाएं। (यहां हैंडलर और ईवेंट फ़ोल्डर्स हैं। जहां ईवेंट हैंडलर के अंदर हैं)

इस ईवेंट फ़ोल्डर के अंदर एक फ़ाइल के साथ एक फ़ाइल बनाएं।

HandleMyMessage.php और यह में इस कोड डाल:

<?php 
namespace App\Handlers\Events; 
use App\Events\SendMessageEvent; // This should be your event class.. 
use Illuminate\Queue\InteractsWithQueue; 
use Illuminate\Contracts\Queue\ShouldQueue; 

class HandleMyMessage{ 
    protected $name; 

    public function __construct() { 
     // 
    } 
    public function handle(Message $event) { 
     // No need to write anything here 
    } 
} 

चेक 2: वहाँ app/Providers/EventServiceProvider.php स्थान पर एक प्रदाता होना चाहिए, और में EventServiceProvider.php

<?php 

namespace App\Providers; 

use Illuminate\Support\Facades\Event; 
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider; 

class EventServiceProvider extends ServiceProvider 
{ 
    /** 
    * The event listener mappings for the application. 
    * 
    * @var array 
    */ 
    protected $listen = [ 
     'App\Events\SendMessageEvent' => [ 
      'App\Handlers\Events\EventServiceProvider', 
     ], 
    ]; 

    /** 
    * Register any events for your application. 
    * 
    * @return void 
    */ 
    public function boot() 
    { 
     parent::boot(); 
    } 
} 

चेक निम्नलिखित कोड डालें 3: और आपको ev भेजने के वाक्यविन्यास को बदलना चाहिए इस तरह आपके नियंत्रक में एंट संदेश:

$broadcast_data['first_name'] = 'John'; 
$broadcast_data['last_name'] = 'Doe'; 
$return_socket['data'] = $broadcast_data; 

Event::fire(new Message($return_socket));  // Sending message to pusherjs via Laravel Event. 

इस पर, आपको अपने सिस्टम पर रेडिस स्थापित करने और इसे चलाने की भी आवश्यकता है।

उम्मीद है कि इससे मदद मिलती है। अगर आपको उपरोक्त में से किसी के लिए अधिक जानकारी चाहिए, तो बस टिप्पणी करें। मैं इसके लिए संदर्भ लिंक पोस्ट कर रहा हूं।

हैप्पी कोडिंग !!! :-)

+0

https://stackoverflow.com/questions/42872749/using-laravel-5-4- पुशर –

0

मुझे यह काम मिल गया। नीचे सही कोड है। मुझे आशा है कि यह वास्तविक समय संदेश भेजने के लिए दूसरों के लिए उपयोगी होगा।

जे एस कार्य

<script> 
    window.Echo.channel('private-SendMessageChannel.{!! \Auth::user()->UserID !!}') 
     .listen('SendMessageEvent', (e) => { 
      console.log(e); 
     }); 
</script> 

नियंत्रक कोड

broadcast(new SendMessageEvent("Hi", 1))->toOthers(); 
//Here 1 is recepient ID 

घटना कोड

class SendMessageEvent implements ShouldBroadcast 
{ 
    use Dispatchable, InteractsWithSockets, SerializesModels; 

    public $Message; 
    private $UserID; 

    public function __construct($message, $RecepientID) 
    { 
     $this->Message = $message; 
     $this->UserID = $RecepientID; 
    } 

    public function broadcastOn() 
    { 
     return new PrivateChannel('SendMessageChannel.' . $UserID); 
    } 

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