دو پکیج تازهٔ اسپتی برای پینگ و TCP در PHP
خلاصهٔ کاملتر
فریک ون در هرتن تو بلاگش نوشته که دو پکیج تازهٔ اسپتی — spatie/ping و spatie/simple-tcp-client — به نسخهٔ پایدار رسیدن. به گفتهٔ خودش انگیزه از Oh Dear اومده؛ سرویس مانیتورینگی که نزدیک هشت ساله میگردونه. تو نظرسنجی از کاربرها، مانیتورینگ ping و TCP یکی از پرتکرارترین درخواستها بود، چون چک کردن آپتایم با یه درخواست سادهٔ GET فقط به درد چیزی میخوره که HTTP حرف بزنه — نه دیتابیس و Redis و سرور ایمیل.
پکیج spatie/ping دور دستور ping خود سیستم میپیچه و خروجی متنیش رو، که پارس کردن برنامهنویسانهش دردسر داره، به یه نتیجهٔ ساختاریافته تبدیل میکنه: موفقیت یا خطا، تعداد پکت ارسالی و دریافتی، درصد پکتلاس و کمینه/بیشینه/میانگین زمان پاسخ. رفتارش هم با پارامترهای کانستراکتور تنظیم میشه: timeoutInSeconds، count، intervalInSeconds، packetSizeInBytes و ttl.
use Spatie\Ping\Ping;
$result = (new Ping('8.8.8.8'))->run();
echo $result->isSuccess() ? 'Success' : 'Failed';
echo "Packet loss: {$result->packetLossPercentage()}%";
echo "Average time: {$result->averageTimeInMs()}ms";پکیج دوم یه کلاینت TCP سرراسته: به هاست و پورت وصل میشی، دیتا میفرستی و جواب میگیری — مثل گرفتن بنر یه سرور SMTP و فرستادن EHLO. نویسنده میگه برای این یکی از Claude Code کمک گرفته، چون با سوکت تو PHP آشنا نبوده؛ کد اولیه رو مدل نوشته و بعد خودش بررسی و تنظیمش کرده.
$client = new TcpClient('smtp.gmail.com', 587);
$client->connect();
echo $client->receive();
$client->send("EHLO test.local\r\n");
echo $client->receive();
$client->close();نویسنده حدس میزنه خیلیها به این پکیجها نیاز پیدا نکنن، ولی از اوپنسورس کردنشون راضیه. Oh Dear خودش از چند اپ لاراولی ساخته شده و با پکیج کردن این قابلیت، همهٔ اون اپها یهجور با پینگ و پورت TCP کار میکنن. چکهای ping و TCP قراره حدود آگوست/سپتامبر به Oh Dear اضافه بشن.
نکات کلیدی:
- spatie/ping دستور ping سیستم رو اجرا میکنه و نتیجه رو ساختاریافته برمیگردونه
- درصد پکتلاس، زمان کمینه/بیشینه/میانگین و انحراف معیار مستقیم در دسترسه
- spatie/simple-tcp-client اتصال TCP باز میکنه، دیتا میفرسته و جواب میگیره
- انگیزهٔ ساختشون قابلیت مانیتورینگ ping و TCP در سرویس Oh Dear بوده




