您好,登录后才能下订单哦!
在 Laravel 中实现实时通信有多种方法,这里将介绍两种常用的方法:使用 Laravel Echo 和 Laravel WebSockets。
首先,确保你已经安装了 Laravel Echo 和 Pusher。在项目根目录下运行以下命令安装它们:
npm install --save laravel-echo pusher-js
接下来,配置 resources/js/bootstrap.js
文件:
import Echo from 'laravel-echo';
import Pusher from 'pusher-js';
window.Pusher = Pusher;
window.Echo = new Echo({
broadcaster: 'pusher',
key: process.env.MIX_PUSHER_APP_KEY,
cluster: process.env.MIX_PUSHER_APP_CLUSTER,
encrypted: true
});
然后,在 .env
文件中设置 Pusher 信息:
BROADCAST_DRIVER=pusher
PUSHER_APP_ID=your_pusher_app_id
PUSHER_APP_KEY=your_pusher_app_key
PUSHER_APP_SECRET=your_pusher_app_secret
PUSHER_APP_CLUSTER=your_pusher_app_cluster
现在,你可以在前端 JavaScript 代码中使用 Echo 进行实时通信:
window.Echo.channel('chat')
.listen('.message', (e) => {
console.log(e.message);
});
document.addEventListener('DOMContentLoaded', () => {
const token = document.head.querySelector('meta[name="csrf-token"]');
window.Echo.initCSRFToken(token.content);
// 发送消息
window.Echo.channel('chat')
.emit('message', {
text: 'Hello, world!'
});
});
在 Laravel 中创建一个事件 MessageSent
和一个监听器 HandleMessageSent
:
php artisan make:event MessageSent
php artisan make:listener HandleMessageSent --event=MessageSent
在 MessageSent
事件中定义数据:
// app/Events/MessageSent.php
namespace App\Events;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;
class MessageSent
{
use Dispatchable, InteractsWithSockets, SerializesModels;
public $message;
public function __construct($message)
{
$this->message = $message;
}
}
在 HandleMessageSent
监听器中处理消息:
// app/Listeners/HandleMessageSent.php
namespace App\Listeners;
use App\Events\MessageSent;
class HandleMessageSent
{
public function handle(MessageSent $event)
{
broadcast(new MessageSent($event->message));
}
}
最后,在 app/Providers/EventServiceProvider.php
中注册监听器:
protected $listen = [
MessageSent::class => [
HandleMessageSent::class,
],
];
首先,确保你已经安装了 Laravel Echo 和 Laravel WebSockets。在项目根目录下运行以下命令安装它们:
npm install --save laravel-echo laravel-websockets
接下来,配置 config/app.php
文件:
'laravel-websockets' => [
'driver' => env('LARAVEL_WEBSOCKETS_DRIVER', 'pusher'),
'key' => env('LARAVEL_WEBSOCKETS_KEY'),
'secret' => env('LARAVEL_WEBSOCKETS_SECRET'),
'app_id' => env('LARAVEL_WEBSOCKETS_APP_ID'),
],
然后,在 .env
文件中设置 WebSockets 信息:
LARAVEL_WEBSOCKETS_DRIVER=pusher
LARAVEL_WEBSOCKETS_KEY=your_websockets_key
LARAVEL_WEBSOCKETS_SECRET=your_websockets_secret
LARAVEL_WEBSOCKETS_APP_ID=your_websockets_app_id
现在,你可以在前端 JavaScript 代码中使用 Echo 进行实时通信:
import Echo from 'laravel-echo';
import Pusher from 'pusher-js';
window.Pusher = Pusher;
window.Echo = new Echo({
broadcaster: 'pusher',
key: process.env.MIX_PUSHER_APP_KEY,
cluster: process.env.MIX_PUSHER_APP_CLUSTER,
encrypted: true
});
接下来,配置 resources/js/bootstrap.js
文件:
import Echo from 'laravel-echo';
import Pusher from 'pusher-js';
window.Pusher = Pusher;
window.Echo = new Echo({
broadcaster: 'pusher',
key: process.env.MIX_PUSHER_APP_KEY,
cluster: process.env.MIX_PUSHER_APP_CLUSTER,
encrypted: true
});
现在,你可以在前端 JavaScript 代码中使用 Echo 进行实时通信:
window.Echo.channel('chat')
.listen('.message', (e) => {
console.log(e.message);
});
document.addEventListener('DOMContentLoaded', () => {
const token = document.head.querySelector('meta[name="csrf-token"]');
window.Echo.initCSRFToken(token.content);
// 发送消息
window.Echo.channel('chat')
.emit('message', {
text: 'Hello, world!'
});
});
在 Laravel 中创建一个事件 MessageSent
和一个监听器 HandleMessageSent
:
php artisan make:event MessageSent
php artisan make:listener HandleMessageSent --event=MessageSent
在 MessageSent
事件中定义数据:
// app/Events/MessageSent.php
namespace App\Events;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;
class MessageSent
{
use Dispatchable, InteractsWithSockets, SerializesModels;
public $message;
public function __construct($message)
{
$this->message = $message;
}
}
在 HandleMessageSent
监听器中处理消息:
// app/Listeners/HandleMessageSent.php
namespace App\Listeners;
use App\Events\MessageSent;
class HandleMessageSent
{
public function handle(MessageSent $event)
{
broadcast(new MessageSent($event->message));
}
}
最后,在 app/Providers/EventServiceProvider.php
中注册监听器:
protected $listen = [
MessageSent::class => [
HandleMessageSent::class,
],
];
这样,你就可以使用 Laravel 进行实时通信了。根据你的需求选择合适的方法,并确保已经正确配置了所有必要的组件。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。