Laravel 回声不听
Posted
技术标签:
【中文标题】Laravel 回声不听【英文标题】:Laravel echo is no listening 【发布时间】:2017-10-11 04:29:07 【问题描述】:我来自委内瑞拉,我在尝试将 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 回显服务器和监听器会发生这种情况:
Laravel echo server output
enter image description here
我认为这个过程工作正常,但我认为我只是对客户有问题..
因为当我发送消息时,客户端没有任何反应。
对不起我的英语,我希望你能帮助我。
【问题讨论】:
【参考方案1】:如果你使用 Echo.channel(my-channel
) 例如你需要做这样的事情,注意 ('.my-event') 出于某种原因你需要一个 (.) 在事件名称之前.
Echo.channel(`my-channel`)
.listen('.my-event', (e) =>
consolec.log(e);
);
【讨论】:
这是唯一对我有用的解决方案。 是的,这对我也有用。但我不知道为什么 我不知道为什么,但它就像一个魅力,干得好兄弟。 我在这上面花了 3 个小时,非常感谢。 我用了 2 天的时间来清除这个解决方案。这是正确的解决方案。非常感谢。【参考方案2】:你应该只使用use SerializesModels;
另外,broadcast(new \App\Events\sendMessage($message,$receiver));
您可以在此处找到 Laravel 5 广播示例,
https://github.com/durmus-aydogdu/real-time-application
【讨论】:
【参考方案3】:在我使用 Redis 的情况下,我注意到我的频道名称 projectName_database 有一个前缀,Laravel> 5.7 会自动为您的频道名称添加前缀,您可以删除 config/database.php 中的前缀 希望它可以帮助某人
【讨论】:
非常感谢,我们遇到了同样的问题。你拯救了我的一天。 Yw,这个问题浪费了我一周的生命:(【参考方案4】:如果没有完整的源代码和正在运行的应用程序,这个问题很难解决。
我已经在这个聊天应用中实现了所有 3 种类型的频道(私人、公共和在线),也许你可以从中得到一些想法:
https://github.com/xparthx/laravel-realtime-chat
谢谢
【讨论】:
【参考方案5】:你在 Laravel 的 PrivateChannel 上进行广播,所以在连接 Echo 时需要使用以下内容:
window.Echo.private('chat.1').listen('sendMessage', e => console.log(e););
如果您仍有问题,请查看此reply
【讨论】:
【参考方案6】:检查“socket.io-client”的版本,你需要使用2.x而不是3.x
【讨论】:
【参考方案7】:我做了上述所有事情,但只将 socket.io-client 降级到 2.3.0 工作:( https://github.com/tlaverdure/laravel-echo-server/issues/550
【讨论】:
至少一个其他答案已经使用 2.x 而不是 3.x 命名。请更清楚地说明您的帖子提供了哪些额外的见解。请注意,您仅链接的内容,至少没有直接在您的帖子中进行总结,不被视为您的答案的一部分。以上是关于Laravel 回声不听的主要内容,如果未能解决你的问题,请参考以下文章