首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Laravel echo没有监听

Laravel echo没有监听
EN

Stack Overflow用户
提问于 2017-05-12 09:06:07
回答 7查看 11.3K关注 0票数 4

我来自委内瑞拉,我在尝试将laravel echo与一个项目集成时遇到了问题,我尝试了所有的方法,我希望得到您的帮助。

也许我没有以正确的方式工作。

我正在尝试使用socket io的广播事件,因为我在一家初创公司工作,很难为像pusher这样的服务付费。

我正在试着做一个简单的实时聊天..

那是我的chatController..

public function index(Request $request){

  $sender=Auth::user()->id;
  $receiver=\App\User::find(2);
  $message=new Message;
  $message->message="Hola, esto es una prueba de eventos";
  $message->user_receiver_id=$receiver->id;
  $message->user_sender_id=Auth::user()->id;
  $message->id_chat=1;
  $message->save();

  event(new \App\Events\sendMessage($message,$receiver));

  return response()->json(["status"=>"ok"]);
}

该聊天将根据确定的组(聊天)的消息存储在数据库中。

将触发的事件为:

类sendMessage实现了ShouldBroadcast {使用Dispatchable,InteractsWithSockets,SerializesModels;

/**
 * Create a new event instance.
 *
 * @return void
 */

public $message;
public $user_receiver;

public function __construct(Message $message,User $user_receiver)
{
    $this->message=$message;
    $this->user_receiver=$user_receiver;

}

public function broadcastOn()
{
    \Log::info($this->message->id_chat);

    return new PrivateChannel('chat.1');


}}

我的app.js是:

require('./bootstrap');
import Echo from "laravel-echo";

window.Echo = new Echo({
broadcaster: 'socket.io',
host: window.location.hostname + ':6001'
});


window.Echo.channel('chat.1')
.listen('sendMessage', e => {
    console.log(e);
});

在第一个实例中,我只想从我的sendMessages事件中获取公共变量,然后我将构建视图。

我运行php artisan侦听器和de laravel echo server。

当我发送消息时,laravel回声服务器和监听程序会发生这种情况:

Laravel echo server output

enter image description here

我认为这个过程运行得很好,但我认为我只与客户有一个问题。

因为当我发送消息时,客户端中没有发生任何事情。

对不起,我的英语,我希望你能帮助我。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2017-05-12 13:53:11

如果没有完整的源代码和正在运行的应用程序,这个问题很难解决。

我已经在这个聊天应用中实现了所有三种类型的通道(私人,公共和在线),也许你可以从中得到一些想法:

https://github.com/xparthx/laravel-realtime-chat

谢谢

票数 0
EN

Stack Overflow用户

发布于 2021-02-08 17:48:10

例如,如果您使用事件(my-channel),则需要执行以下操作,请注意(‘.my-Echo.channel’),出于某种原因,您需要使用(.)在事件名称之前。

Echo.channel(`my-channel`)
.listen('.my-event', (e) => {
    consolec.log(e);
});
票数 11
EN

Stack Overflow用户

发布于 2018-06-07 05:14:02

您应该只使用use SerializesModels;

还有,broadcast(new \App\Events\sendMessage($message,$receiver));

你可以在这里找到Laravel 5广播的例子,

https://github.com/durmus-aydogdu/real-time-application

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43927792

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档