Laravel echo 是没有监听
Laravel echo is no listening
我来自委内瑞拉,我在尝试将 laravel echo 与项目集成时遇到问题,我尝试了一切,我想得到你的帮助。
可能是我工作方式不对
我正在尝试将广播事件与套接字 io 结合使用,因为我在一家初创公司工作,很难支付像 pusher 这样的服务。
我正在尝试进行简单的实时聊天..
那是我的聊天控制器..
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 事件中获取 public 变量,之后我将构建视图。
我 运行 php artisan 监听器和我 运行 de laravel 回显服务器。
当我发送消息时,laravel 回显服务器和侦听器会发生这种情况:
Laravel echo server output
enter image description here
我认为这个过程工作正常,但我认为我只是与客户有问题..
因为当我发送消息时客户端没有任何反应。
对不起我的英语,我希望你能帮助我。
如果没有完整的源代码和 运行 应用程序,这个问题很难解决。
我已经在这个聊天应用程序中实现了所有 3 种类型的频道(私人、public 和存在),也许你可以从中得到一些想法:
https://github.com/xparthx/laravel-realtime-chat
谢谢
您应该只使用 use SerializesModels;
此外,broadcast(new \App\Events\sendMessage($message,$receiver));
您可以在此处找到 Laravel 5 广播示例,
您正在 Laravel 中的私人频道进行广播,因此在连接 Echo 时需要使用以下内容:
window.Echo.private('chat.1').listen('sendMessage', e => {console.log(e);});
如果您仍然遇到问题,请查看此 reply
在我的例子中,我使用的是 Redis 我注意到我的频道名称有一个前缀 projectName_database,Laravel> 5.7 会自动为您的频道名称添加一个前缀,您可以删除该前缀在配置 / database.php
希望对某人有所帮助
如果你使用 Echo.channel(my-channel
) 例如你需要做这样的事情,注意 ('.my-event') 出于某种原因你需要一个 ( .) 在活动名称之前。
Echo.channel(`my-channel`)
.listen('.my-event', (e) => {
consolec.log(e);
});
检查“socket.io-client”的版本,需要使用2.x而不是3.x
我做了上面的所有事情,但只有将 socket.io-client 降级到 2.3.0 才有效:(
https://github.com/tlaverdure/laravel-echo-server/issues/550
我来自委内瑞拉,我在尝试将 laravel echo 与项目集成时遇到问题,我尝试了一切,我想得到你的帮助。
可能是我工作方式不对
我正在尝试将广播事件与套接字 io 结合使用,因为我在一家初创公司工作,很难支付像 pusher 这样的服务。
我正在尝试进行简单的实时聊天..
那是我的聊天控制器..
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 事件中获取 public 变量,之后我将构建视图。
我 运行 php artisan 监听器和我 运行 de laravel 回显服务器。
当我发送消息时,laravel 回显服务器和侦听器会发生这种情况:
Laravel echo server output
enter image description here
我认为这个过程工作正常,但我认为我只是与客户有问题..
因为当我发送消息时客户端没有任何反应。
对不起我的英语,我希望你能帮助我。
如果没有完整的源代码和 运行 应用程序,这个问题很难解决。
我已经在这个聊天应用程序中实现了所有 3 种类型的频道(私人、public 和存在),也许你可以从中得到一些想法:
https://github.com/xparthx/laravel-realtime-chat
谢谢
您应该只使用 use SerializesModels;
此外,broadcast(new \App\Events\sendMessage($message,$receiver));
您可以在此处找到 Laravel 5 广播示例,
您正在 Laravel 中的私人频道进行广播,因此在连接 Echo 时需要使用以下内容:
window.Echo.private('chat.1').listen('sendMessage', e => {console.log(e);});
如果您仍然遇到问题,请查看此 reply
在我的例子中,我使用的是 Redis 我注意到我的频道名称有一个前缀 projectName_database,Laravel> 5.7 会自动为您的频道名称添加一个前缀,您可以删除该前缀在配置 / database.php 希望对某人有所帮助
如果你使用 Echo.channel(my-channel
) 例如你需要做这样的事情,注意 ('.my-event') 出于某种原因你需要一个 ( .) 在活动名称之前。
Echo.channel(`my-channel`)
.listen('.my-event', (e) => {
consolec.log(e);
});
检查“socket.io-client”的版本,需要使用2.x而不是3.x
我做了上面的所有事情,但只有将 socket.io-client 降级到 2.3.0 才有效:( https://github.com/tlaverdure/laravel-echo-server/issues/550