في هذا المقال نشرح كيفية إعداد الأحداث اللحظية في Laravel على نظام ويندوز باستخدام بيئة تطوير محلية. سنستخدم:
في النهاية ستكون قادراً على إرسال الأحداث من Laravel واستقبالها في الواجهة الأمامية
لحظيًا على localhost.
افتح PowerShell كمسؤول (Run as Administrator) ثم نفّذ الأمر:
wsl --install
سيتم تثبيت WSL و Ubuntu بشكل افتراضي. أعد تشغيل الجهاز إذا طُلِب ذلك.
للتحقق من التثبيت:
wsl -l -v
من قائمة Start افتح Ubuntu ثم قم بتعيين اسم المستخدم وكلمة المرور الخاصة بلينكس.
سنستخدم Redis كسيرفر للبث (Broadcasting driver).
sudo apt update && sudo apt upgrade -y
sudo apt install redis-server -y
sudo service redis-server start
للتحقق من أن Redis يعمل:
redis-cli ping
المخرجات المتوقعة:
PONG
سيكون Redis متاحًا على 127.0.0.1:6379
من داخل WSL:
sudo apt install php-redis -y
ثم أعد تشغيل PHP (سواء كنت تستخدم PHP-FPM أو Apache).
داخل مجلد مشروع Laravel نفّذ:
php artisan install:broadcasting
هذا الأمر يقوم بضبط إعدادات البث تلقائيًا.
.envBROADCAST_CONNECTION=redis
QUEUE_CONNECTION=redis
CACHE_DRIVER=redis
REDIS_HOST=127.0.0.1
REDIS_PORT=6379
config/broadcasting.phpتأكد من أن تعريف Redis موجود ومُفعّل:
'redis' => [
'driver' => 'redis',
'connection' => 'default',
],
افتح ملف config/app.php وتأكد أن السطر التالي غير مُعلّق:
App\Providers\BroadcastServiceProvider::class,
Laravel Echo Server يستمع للأحداث من Laravel ويقوم بدفعها عبر WebSockets.
npm install -g laravel-echo-server
من جذر مشروع Laravel نفّذ:
laravel-echo-server init
أجب عن الأسئلة مثل:
? Do you want to run this server in development mode? Yes
? Which port would you like to serve on? 6001
? Which database would you like to use to store presence channel members? redis
? Enter the host of your Laravel authentication server: http://localhost
? Will you be serving on http or https? http
? Do you want to generate a client ID/Key? Yes
سيتم إنشاء ملف laravel-echo-server.json.
laravel-echo-server.json{
"authHost": "http://localhost",
"authEndpoint": "/broadcasting/auth",
"clients": [
{
"appId": "local",
"key": "localkey"
}
],
"database": "redis",
"databaseConfig": {
"redis": {
"host": "127.0.0.1",
"port": 6379
}
},
"devMode": true,
"host": null,
"port": 6001,
"protocol": "http",
"socketio": {},
"secureOptions": 67108864
}
laravel-echo-server start
يُفترض أن تظهر مخرجات مثل:
✔ Running at http://localhost:6001
✔ Listening for events...
npm install laravel-echo socket.io-client
resources/js/bootstrap.jsimport Echo from 'laravel-echo';
import io from 'socket.io-client';
window.io = io;
window.Echo = new Echo({
broadcaster: 'socket.io',
host: window.location.hostname + ':6001'
});
ثم قم بعمل Build للأصول:
npm run dev
php artisan make:event MessageSent
app/Events/MessageSent.php:
use Illuminate\Broadcasting\Channel;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;
class MessageSent implements ShouldBroadcast
{
use Dispatchable, InteractsWithSockets, SerializesModels;
public string $message;
public function __construct($message)
{
$this->message = $message;
}
public function broadcastOn()
{
return new Channel('chat');
}
}
use App\Events\MessageSent;
Route::get('/send', function () {
broadcast(new MessageSent('Hello from Laravel'));
return 'Event Sent';
});
window.Echo.channel('chat')
.listen('MessageSent', (e) => {
console.log(e.message);
});
افتح Console المتصفح ثم زر الرابط:
http://localhost/send
يُفترض أن تشاهد الرسالة تظهر فورًا.
ShouldBroadcastroutes/channels.phpBroadcast::channel('chat', function () {
return true;
});
البث في Laravel يعتمد على الـ Queue، لذلك تأكد أن عامل الـ Queue يعمل:
php artisan queue:work
| المشكلة | الحل |
|---|---|
| الأحداث لا تُطلق | تأكد أن Redis يعمل بشكل صحيح |
| Echo لا يتصل | تحقق من المنفذ 6001 وحالة Echo Server |
| خطأ في التوثيق (Auth error) | راجع إعداد authHost ومسارات التوثيق |
| لا يوجد أي مخرجات | تأكد من تشغيل عامل الـ Queue باستخدام php artisan queue:work |
باستخدام WSL + Redis + Laravel Echo Server يمكنك تشغيل الأحداث اللحظية في Laravel على نظام ويندوز بسهولة تامة في بيئة محلية، وبشكل قريب جدًا من بيئات الإنتاج، مع اتصال WebSocket سريع وموثوق.
برمجة موفقة 🚀