在CentOS系统中,要在Laravel中实现实时通讯,你可以使用Laravel Echo和Laravel Websockets。以下是实现实时通讯的步骤:
首先,确保你已经安装了Node.js和NPM。然后,在你的Laravel项目中运行以下命令来安装Laravel Echo和Laravel Websockets:
npm install --save laravel-echo pusher-js
npm install --save-dev laravel-websockets
在CentOS系统中,首先需要安装RabbitMQ或Redis作为消息队列。这里以RabbitMQ为例:
sudo yum install epel-release
sudo yum install rabbitmq-server
sudo systemctl start rabbitmq-server
sudo systemctl enable rabbitmq-server
接下来,安装laravel-websockets扩展:
composer require beyondcode/laravel-websockets
然后,在config/app.php中注册服务提供者:
'providers' => [
// ...
BeyondCode\LaravelWebSockets\WebSocketsServiceProvider::class,
],
接着,在config/broadcasting.php中配置广播驱动为pusher,并设置相关参数:
'connections' => [
// ...
'pusher' => [
'driver' => 'pusher',
'key' => env('PUSHER_APP_KEY'),
'secret' => env('PUSHER_APP_SECRET'),
'app_id' => env('PUSHER_APP_ID'),
'options' => [
'cluster' => env('PUSHER_APP_CLUSTER'),
'useTLS' => true,
'host' => env('PUSHER_APP_HOST', '127.0.0.1'),
'port' => env('PUSHER_APP_PORT', 6001),
'scheme' => env('PUSHER_APP_SCHEME', 'https'),
],
],
],
最后,在.env文件中设置相关环境变量:
BROADCAST_DRIVER=pusher
PUSHER_APP_ID=your-app-id
PUSHER_APP_KEY=your-app-key
PUSHER_APP_SECRET=your-app-secret
PUSHER_APP_CLUSTER=your-app-cluster
在resources/js/bootstrap.js文件中,配置Laravel Echo以使用Pusher:
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,
});
使用Artisan命令创建事件和监听器:
php artisan make:event MessageSent
php artisan make:listener SendMessage --event=MessageSent
在app/Events/MessageSent.php中定义事件:
namespace App\Events;
use Illuminate\Broadcasting\Channel;
use Illuminate\Queue\SerializesModels;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Broadcasting\PresenceChannel;
use Illuminate\Foundation\BroadcastsNeedsUser;
class MessageSent
{
use Dispatchable, InteractsWithSockets, SerializesModels, BroadcastsNeedsUser;
public $message;
public function __construct($message)
{
$this->message = $message;
}
public function broadcastOn()
{
return new PrivateChannel('channel-name');
}
}
在app/Listeners/SendMessage.php中定义监听器:
namespace App\Listeners;
use App\Events\MessageSent;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
class SendMessage
{
public function handle(MessageSent $event)
{
// 处理接收到的消息
}
}
在app/Providers/EventServiceProvider.php中注册监听器:
protected $listen = [
MessageSent::class => [
SendMessage::class,
],
];
在你的应用程序中,当需要发送消息时,触发MessageSent事件:
event(new MessageSent($message));
在你的前端代码中,监听MessageSent事件:
import Echo from 'laravel-echo';
window.Echo.private('channel-name')
.listen('MessageSent', (e) => {
console.log(e.message);
});
现在,当MessageSent事件被触发时,前端将实时接收到消息。