Laravel echo没有收听

时间:2017-05-12 01:06:07

标签: php jquery laravel artisan laravel-echo

我来自委内瑞拉,我有一个问题试图将laravel echo与项目整合,我尝试了一切,我想得到你的帮助。

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

我正在尝试使用套接字io进行广播事件,因为我在创业公司工作并且非常难以支付像推送器这样的服务。

我正在尝试进行简单的实时聊天..

那是我的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"]);
}

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

将被解雇的事件是:

class 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 listener,然后运行de laravel echo服务器。

当我发送消息时,这发生在laravel echo服务器和监听器上:

Laravel echo server output

enter image description here

我认为这个过程很好但我认为我只对客户有问题。

因为我发送邮件时客户端没有任何事情发生。

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

6 个答案:

答案 0 :(得分:4)

例如,如果你使用 Echo.channel(my-channel) 你需要做这样的事情,注意 ('.my-event') 出于某种原因你需要一个 (.)活动名称。

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

答案 1 :(得分:2)

在我使用Redis的情况下,我注意到我的频道名称projectName_database有一个前缀,Laravel> 5.7会自动在您的频道名称中添加一个前缀,您可以在config / database.php中删除该前缀 希望对别人有帮助

答案 2 :(得分:0)

您应该只使用use SerializesModels;

此外,broadcast(new \App\Events\sendMessage($message,$receiver));

您可以在此处找到Laravel 5 Broadcasting示例

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

答案 3 :(得分:0)

我仍然无法弄清楚,但Echo似乎不适用于私人频道。

尝试使用Channel()或PresenceChannel();

答案 4 :(得分:0)

您正在Laravel的PrivateChannel上进行广播,因此在与Echo连接时需要使用以下内容:

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

如果您仍然遇到问题,请查看此reply

答案 5 :(得分:0)

检查“socket.io-client”的版本,你需要使用2.x而不是3.x