روز برنامه‌نویس مبارک 🤩🎉 از هدایای روز برنامه‌نویس جا نمونی ⌛
۰ ثانیه
۰ دقیقه
۰ ساعت
۵ محمدحسین عسکری
توسعه ربات تلگرام با php
جامعه پی اچ پی ایجاد شده در ۰۷ آذر ۱۴۰۰
<p>سلام وقت بخیر حقیقتا سرفصل مناسبی برای بیان سوالم پیدا نکردم !</p><p>من چند روزیه دارم یه ربات تلگرام با php توسعه میدم به یک مورد برخورد کردم که صلاح دونستم اینجا بیان کنم و من اکثرا سعی میکنم با سرچ و جستجو مشکلم رو حل کنم اما اینو پیدا نکردم !</p><p>ربات مدیریت گروه تلگرامی هستش و برای زیاد نشدن پیام‌های گروه نیاز هست تا پیامی که ارسال میشه بعد از چند ثانیه حذف بشه</p><p>1 - چطور میشه یک پیام ارسالی رو بعد از چند ثانیه حذف کرد؟ cron job که بخوایم استفاده کنیم هر دقیقه یکبار اجرا میشه از sleep استفاده کنیم کلا وقفه توی روند اسکریپت میندازه و از javascript و ajax هم استفاده کنیم حتما باید کاربر روی سایت حضور داشته باشه وگرنه کد ajax مثلا بعد از 10 ثانیه اجرا نمیشه و پیام رو حذف کنه</p><p>اگر کسی میتونه کمکم کنه ممنون میشم سپاس از همگی</p>
<p>سلام.</p><p>بهترین راه استفاده از وب هوک (WebHook) خود تلگرام هست.</p><p>آدرستون رو بهش میدین(https باید باشه) هر موقع پیامی اومده باشه، سرور تلکرام خودش درخواست ارسال نیمنه به آدرس شما.</p>
محسن موحد ۰۷ آذر ۱۴۰۰، ۱۳:۱۶
<p>سلام بله درسته از وب هوک استفاده میشه همین الانش !</p><p>بحث اینجاست مثلا ربات یک پیام داخل گروه ارسال میکنه من میخوام این پیامی که ربات ارسال کرده رو 30 ثانیه بعد حذف کنم نمیخوام در لحظه حذف کنم چطور تایمر بدم بهش باید از کران جاب استفاده بشه؟ چون کران جاب هم هر دقیقه فایر میشه با ثانیه نمیشه هندل کرد</p>
محمدحسین عسکری ۰۷ آذر ۱۴۰۰، ۱۳:۲۷
<p>میتونید دو تا cron ایجاد کنید که دومی یک sleep 30 ثانیه ای داشته باشه.(جفت کران هر یک دقیقه اجرا میشن ولی کران دوم 30 ثانیه sleep داره.)</p><p><br></p><p>یه راه دیگه، میتونید Long Polling عمل کنید، زمانی که درخواست ارسال شد 30 ثانیه در سرور بمونه. (یک حلقه بینهایت بهمراه sleep)</p><p>اما چون در این مدل درخواست‌ها زیاد خواهد بود، راه بهینه ای نیست.</p><p><br></p><p><br></p>
محسن موحد ۰۷ آذر ۱۴۰۰، ۱۵:۰۵
<p>اها درسته خیلی نکته جالبی بود !</p><p>فقط تنها موضوعم اینه که زمانی از sleep استفاده بشه توی روند اسکریپت وقفه ایجاد نمیکنه؟ اخه sleep هرسری استفاده کردم کلا وقفه میندازه توی اسکریپت البته توی کرون جاب استفاده نکردم</p>
محمدحسین عسکری ۰۷ آذر ۱۴۰۰، ۱۵:۱۵
<p>تابع usleep هم وجود داره. در این مورد اسکریپت باید مکث 30 ثانیه ای داشته باشه و set_time_limit(0) ست شده باشه.</p><p>شما فرض کنید 100 کاربر بصورت همزمان وارد سایت میشن، مگه اختلالی در اجرای اسکریپت بوجود میاد!</p><p>البته گفتم این مدل واسه مورد شما خوب نیست. این مدل خوبه برای مواردی مثل اپ چت که جایگزینی برای سوکت باشه. ولی اینجا که پیام‌های زیادی ردو بدل میشه مثل این میمونه که 1000 پیام ردو بدل بشه، انگار 1000 کاربر وارد سایت شدن و 1000 فایل مکث 30 ثانیه ای دارن که منابع بسیار زیادی نصرف میکنه و اختلال هم بوجود میاد.</p><p><br></p><p>اما کران جاب برای این کار مناسب‌ترین راهه! چون کلا دو تا کران بیشتر ندارید. یعنی اجرای دو فایل. یکی هر یک دقیقه و دیگری هر 30 ثانیه. سریعا اجرا میشن و در call‌های بعدی این کران ها، کران‌های قبلی تفسیرشون به پایان رسیده.</p><p>اما در مدل 30 ثانیه sleep تمام اسکریپت‌ها وقتی اجرا میشن که هنوز اسکریپت‌های قبلی باز هستن و تایم تفسیرشون تموم نشده.</p><p>این مدل long polling زمانی خوبه که کلا یک اسکریپت در حال اجرا باشه. یعنی در هر زمان یک پردازش بازه. مثلا هر پیامی که بیاد، تفسیر به پایان میرسه و ارسال میشه به کلاینت و مجدد یک پردازش دیگه باز میشه و گوش وایمیسته. بنابراین تداخلی هم نمیبینیم که در یک لحظه چند فایل در حال پردازش باشن.</p>
بهترین پاسخ
محسن موحد ۰۷ آذر ۱۴۰۰، ۱۵:۴۳