5

我来自委内瑞拉,我在尝试将 laravel echo 与项目集成时遇到问题,我尝试了一切,我想得到你的帮助。

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

我正在尝试使用带有套接字 io 的广播事件,因为我在一家初创公司工作,并且很难支付推送器之类的服务。

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

那是我的聊天控制器..

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 服务器。

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

Laravel 回显服务器输出

在此处输入图像描述

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

因为当我发送消息时,客户端没有任何反应。

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

4

7 回答 7

14

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

Echo.channel(`my-channel`)
.listen('.my-event', (e) => {
    consolec.log(e);
});
于 2021-02-08T09:48:10.110 回答
2

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

于 2020-06-10T09:58:38.887 回答
2

你应该只使用use SerializesModels;

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

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

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

于 2018-06-06T21:14:02.173 回答
0

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

于 2021-05-20T10:46:21.430 回答
0

我做了上述所有事情,但只将 socket.io-client 降级到 2.3.0 工作:( https://github.com/tlaverdure/laravel-echo-server/issues/550

于 2021-09-23T17:28:19.093 回答
0

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

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

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

谢谢

于 2017-05-12T05:53:10.757 回答
0

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

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

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

于 2020-03-23T03:59:35.863 回答