فصل ۲: نصب و راهاندازی اولیه¶
در این فصل، مراحل نصب و راهاندازی اولیه Laravel Reverb در یک پروژه لاراول نسخه ۱۲ را بررسی میکنیم. هدف این است که بتوانید سرور Reverb را نصب کرده، تنظیمات اولیه را انجام دهید، و اتصال WebSocket را با یک ابزار ساده تست کنید. این فصل بر پایه مستندات رسمی لاراول ۱۲.x و بهترین شیوههای توسعه تنظیم شده است.
نصب Reverb با Artisan Commands¶
Laravel Reverb بهعنوان یک پکیج رسمی لاراول ارائه شده و نصب آن از طریق Composer و دستورات Artisan بسیار ساده است. مراحل زیر را دنبال کنید:
- نصب پکیج Reverb:
ابتدا مطمئن شوید که یک پروژه لاراول نسخه ۱۲ دارید. اگر پروژهای ندارید، با دستور زیر یک پروژه جدید بسازید:
composer create-project laravel/laravel reverb-project
cd reverb-project
- نصب پکیج broadcasting و Reverb:
برای فعال کردن سیستم broadcasting و نصب Reverb، از دستورات زیر استفاده کنید:
composer require laravel/reverb
php artisan install:broadcasting
php artisan reverb:install
- دستور
install:broadcastingتنظیمات اولیه سیستم broadcasting لاراول را در پروژه شما اعمال میکند. -
دستور
reverb:installفایلهای تنظیمات Reverb (مانندconfig/reverb.php) و بهروزرسانیهای لازم در فایلهای پروژه (مانند.env) را اضافه میکند. -
بررسی نصب:
پس از اجرای دستورات بالا، فایل config/reverb.php ایجاد میشود که شامل تنظیمات پیشفرض Reverb است. همچنین، فایل .env شما با متغیرهای مربوط به Reverb بهروزرسانی میشود.
تنظیمات اولیه فایل .env¶
فایل .env برای پیکربندی اتصال به سرور Reverb و احراز هویت کلاینتها استفاده میشود. پس از اجرای reverb:install، متغیرهای زیر به فایل .env اضافه میشوند. این مقادیر را بررسی و در صورت نیاز ویرایش کنید:
BROADCAST_CONNECTION=reverb
REVERB_APP_ID=my-reverb-app
REVERB_APP_KEY=your-app-key
REVERB_APP_SECRET=your-app-secret
REVERB_HOST=localhost
REVERB_PORT=8080
REVERB_SCHEME=http
توضیح متغیرها:¶
BROADCAST_CONNECTION=reverb: مشخص میکند که Reverb بهعنوان درایور broadcasting استفاده شود.REVERB_APP_ID: شناسه منحصربهفرد برنامه شما. میتوانید آن را تغییر دهید، اما باید با تنظیمات کلاینت (مانند Laravel Echo) همخوانی داشته باشد.REVERB_APP_KEYوREVERB_APP_SECRET: برای احراز هویت اتصالات WebSocket استفاده میشوند. این مقادیر را امن نگه دارید و در محیط تولید از مقادیر تصادفی و پیچیده استفاده کنید.REVERB_HOSTوREVERB_PORT: آدرس و پورت سرور Reverb. در محیط محلی، معمولاًlocalhost:8080است.REVERB_SCHEME: پروتکل اتصال (httpیاhttps). در محیط تولید، ازhttpsبرای امنیت بیشتر استفاده کنید.
نکته: اگر چندین اپلیکیشن از یک سرور Reverb استفاده میکنند، باید REVERB_APP_ID منحصربهفرد برای هر اپلیکیشن تنظیم شود.
راهاندازی سرور Reverb¶
برای اجرای سرور Reverb، از دستور زیر استفاده کنید:
php artisan reverb:start
این دستور سرور WebSocket را روی localhost:8080 (یا پورت مشخصشده در .env) راهاندازی میکند. خروجی مشابه زیر را مشاهده خواهید کرد:
Starting Laravel Reverb...
Server running on [http://localhost:8080].
Press Ctrl+C to stop the server
گزینههای اضافی:¶
- حالت دیباگ: برای مشاهده لاگهای دقیقتر، از گزینه
--debugاستفاده کنید:
php artisan reverb:start --debug
- مشخص کردن هاست و پورت: اگر نیاز به تغییر هاست یا پورت دارید، میتوانید از گزینههای
--hostو--portاستفاده کنید:
php artisan reverb:start --host=127.0.0.1 --port=9000
نکته: در محیط توسعه، مطمئن شوید که پورت انتخابشده (مثلاً 8080) توسط برنامه دیگری اشغال نشده است.
تست اولیه اتصال با ابزارهای ساده¶
برای اطمینان از کارکرد صحیح سرور Reverb، میتوانید اتصال WebSocket را با یک ابزار ساده مانند wscat یا یک کلاینت WebSocket در مرورگر تست کنید.
مرحله ۱: نصب ابزار wscat¶
ابزار wscat یک کلاینت خط فرمان برای تست WebSocket است. آن را با npm نصب کنید:
npm install -g wscat
مرحله ۲: اتصال به سرور Reverb¶
سرور Reverb را اجرا کنید (php artisan reverb:start) و در ترمینال دیگری، دستور زیر را اجرا کنید:
wscat -c ws://localhost:8080/app/your-app-key?protocol=7&client=js
# Example
wscat -c ws://127.0.0.1:8484/app/cpcjylkqykmpqjnhuj4s
ws://localhost:8080: آدرس سرور Reverb (اگر ازhttpsاستفاده میکنید، ازwss://استفاده کنید)./app/your-app-key: endpoint استاندارد Reverb که ازREVERB_APP_KEYدر.envاستفاده میکند.protocol=7&client=js: پارامترهای موردنیاز برای سازگاری با پروتکل WebSocket.
اگر اتصال موفق باشد، خروجی زیر را در ترمینال خواهید دید:
Connected (press CTRL+C to quit)
مرحله ۳: ارسال پیام تستی¶
برای تست ارسال پیام، یک event ساده ایجاد میکنیم و آن را از طریق Reverb broadcast میکنیم.
- ایجاد یک Event: یک event جدید بسازید:
php artisan make:event TestMessage
فایل app/Events/TestMessage.php را به صورت زیر ویرایش کنید:
<?php
namespace App\Events;
use Illuminate\Broadcasting\Channel;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;
class TestMessage implements ShouldBroadcast
{
use Dispatchable, InteractsWithSockets, SerializesModels;
public $message;
public function __construct($message)
{
$this->message = $message;
}
public function broadcastOn()
{
return new Channel('test-channel');
}
public function broadcastAs()
{
return 'test.message';
}
}
- ایجاد Route برای ارسال پیام:
فایل routes/web.php را بهروزرسانی کنید:
<?php
use App\Events\TestMessage;
use Illuminate\Support\Facades\Route;
Route::get('/send-test', function () {
event(new TestMessage('Test message from Reverb!'));
return 'Test message sent!';
});
- اتصال به کانال با wscat:
در wscat، به کانال عمومی متصل شوید:
wscat -c ws://localhost:8080/app/your-app-key?protocol=7&client=js
سپس پیام زیر را برای subscription به کانال ارسال کنید:
{"command":"subscribe","identifier":"{\"channel\":\"test-channel\"}"}
- ارسال پیام و بررسی:
مرورگر را باز کنید و به آدرس
http://localhost:8000/send-testبروید. در ترمینالwscat، باید پیام زیر را دریافت کنید:
{"type":"message","event":"test.message","data":{"message":"Test message from Reverb!"}}
تست با مرورگر¶
برای تست در مرورگر، میتوانید یک کلاینت ساده JavaScript بنویسید:
<!DOCTYPE html>
<html>
<head>
<title>Reverb Test</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
</head>
<body>
<h1>Test Laravel Reverb</h1>
<button onclick="sendTestMessage()">Send Test Message</button>
<p id="messages"></p>
<script>
const ws = new WebSocket('ws://localhost:8080/app/your-app-key?protocol=7&client=js');
ws.onopen = () => {
ws.send(JSON.stringify({
command: 'subscribe',
identifier: JSON.stringify({ channel: 'test-channel' })
}));
};
ws.onmessage = (event) => {
const data = JSON.parse(event.data);
if (data.type === 'message') {
$('#messages').append(`<p>${data.data.message}</p>`);
}
};
function sendTestMessage() {
$.get('/send-test');
}
</script>
</body>
</html>
- فایل بالا را در
resources/views/welcome.blade.phpقرار دهید. - سرور لاراول را اجرا کنید:
php artisan serve - به
http://localhost:8000بروید، دکمه را کلیک کنید، و پیام را در صفحه ببینید.
نکات و بهترین شیوهها¶
- امنیت: در محیط تولید،
REVERB_APP_KEYوREVERB_APP_SECRETرا با مقادیر تصادفی و امن جایگزین کنید (مثلاً باphp artisan key:generate). - فایروال: مطمئن شوید که پورت 8080 (یا پورت انتخابشده) در فایروال باز است.
- ابزارهای تست: علاوه بر
wscat، میتوانید از افزونههای مرورگر مانند "Simple WebSocket Client" برای تست استفاده کنید.
تمرین پیشنهادی¶
- یک فرم ساده به صفحه
welcome.blade.phpاضافه کنید تا کاربران بتوانند پیامهای سفارشی ارسال کنند و در کانال عمومی نمایش داده شوند. - سرور Reverb را با گزینه
--debugاجرا کنید و لاگهای اتصال را بررسی کنید.
منابع¶
- مستندات رسمی لاراول:
laravel.com/docs/12.x/reverb - مستندات WebSocket:
developer.mozilla.org/en-US/docs/Web/API/WebSocket
در فصل بعدی، به پیکربندی پیشرفتهتر Reverb و مدیریت چندین اپلیکیشن خواهیم پرداخت.