PDA

View Full Version : سوال: تایمر برای java و php



sedamorde
دوشنبه 15 تیر 1388, 01:46 صبح
سلام
من میخوام یک برنامه بسازم که به تایمر نیاز دارم. در واقع به تایمری مثل بازی travian. کسی میدونه تو این بازی چطوری تایمر به MySql متصل و چطوری در زمانی که کاربر آنلاین نیست محاسبات بازی دقیق انجام میشه؟
مرسی

sedamorde
سه شنبه 16 تیر 1388, 14:43 عصر
هیچ کس پیشنهادی نداره؟

sepehrmm
سه شنبه 16 تیر 1388, 23:55 عصر
سلام
چطوری در زمانی که کاربر آنلاین نیست محاسبات بازی دقیق انجام میشه؟
مرسی
به نظرم برای دقیق بودن باید از ایجکس استفاده کنی :
یه صفحه برگردون به کاربر که توش با جاوا وقتی صفحه کامل لود شد یه درخواست به سرور بفرسته سمت سرور زمان رو توی دیتابیس ذخیره کن و یه پیغام موفقیت به کلاینت بفرست اونوقت جاوا اسکریپت باید شمارش معکوس رو شروع کنه .
در پایان شمارش دیگه بستگی به کارت عمل مناسب رو باید انجام بدی.
اگه از ایجکس استفاده نکنی و در همون اول زمان رو در دیتابیس ست کنی و صفحه رو بفرستی اگه سرعت کاربر پایین باشه یا به هر دلیلی صفحه رو دیر لود کنه یه مقدار زمان از دست میره البته همین احتمال هم برای روش ایجکس هست ولی چون حجم تبادل داده کمتره تاخیر نیز کم میشه.
برای دقت بیشتر میشه از روشهای کمکی هم استفاده کرد مثلا زمان تاخیر کاربر رو بدست آورد و این زمان رو به زمانی که به کاربر میفرستی اضافه کرد تا جبران تاخیر رو بکنه :
مثلا زمان درخواست اولیه کاربر رو ذخیره کرد و صفحه رو برگردوند (به همراه یه متغیر که زمان سرور رو توش داره) ، بعد با ایجکس کاربر چند بار ( مثلا 2-3 ) به سرور این زمان ها رو که میفرسته برگردوند و سرور زمان بین درخواست قبلی و فعلی رو حساب کنه تا بطور تقریبی تاخیر کاربر رو بتونی میانگین بگیری و به زمانی که به کاربر میفرستی اضافه کنی
البته این تاخیری که ازش حرف میزنیم توی بیشتر مواقع زیر 2-3 ثانیه است و اگه زمان خیلی دقیق برات مهم نیست روش اول توصیه میشه .

امیـرحسین
چهارشنبه 17 تیر 1388, 03:06 صبح
سایت Travian رو میشه با cronJob هم تصور کرد. در سرور، ساعت سرور که مشخصه و مدت زمان لازم برای فعالیت هم معلومه.
به این ترتیب وقتی درخواستی فرستاده میشه، یک cronejob تعیین میشه که باید سر ساعت مشخص شده، اجرا شه.
مثلا وقتی میخواید ساختمانی بسازید که 20 دقیقه دیگه تکمیل میشه، یک کرون جاب برای 20 دقیقه دیگه ساخته میشه که وقتی اجرا شد، فلان ساختمان رو ساخته شده flag کنه.
البته این حدس هست. احتمال زیاد همچین سایتی رو توسط اپلیکشنهای مثلا یونیکس میسازند...

این رو هم ببینید شاید چیزی پیدا کردید: Google :: travian technical programming (http://www.google.com/search?ie=UTF-8&q=travian+technical+programming)

--------
توضیح: توسط قابلیت Cronejob می تونید کد یا اسکریپتی رو تعیین کنید تا توی یک تاریخ و زمان مشخص یا هر چند وقت یکبار بصورت خودکار اجرا شه. توضیح بیشتر (http://sitepoint.com/article/introducing-cron)

sepehrmm
چهارشنبه 17 تیر 1388, 13:58 عصر
امیر حسین درست میگه اگه فقط از کد سمت کلاینت استفاده کرد اگر کاربر مثلا مرورگر رو ببنده درست عمل نمیکنه باید از کد سمت سرور استفاده کرد که تنها راهش همین Cronejob است ولی اگه سرور اختصاصی داشته باشی میشه برنامه هم بنویسی .

sedamorde
چهارشنبه 17 تیر 1388, 22:23 عصر
مرسی دوستان از این راهنمایی های خوب واقعا متشکر.
من کلی جستجو کردم و متوجه شدم که برای محاسبه زمان مانند گفته sepehrmm عزیز , زمان شروع در دیتابس نوشته میشه و زمان پایان هم مشخص میشه. حالا هر بار که کاربر وارد میشه زمان باقی مانده محاسبه میشه و در جاوا قرار میگیره که به صورت معکوس نمایش بده تا به 0 برسه. در حقیقت جاوا (آجاکس) کاری را انجام نمیده فقط به کاربر نمایش داده میشه!
امیـرحسین جان مرسی از راهنمایت , من کد اصلی ای که تراوین از روی اون ساخته شده را پیدا کردم.
اگر از cronJob استفاده بشه باید در هر ثانیه صدها محاسبه انجام بده که غیر ممکن!

mahmood3d
سه شنبه 26 آبان 1388, 14:33 عصر
سلام دوستان
با اینکه می دونم این پست مربوط به چند ماه پیشه ولی دیدم سؤالم خیلی شبیه به این هست گفتم همین جا مطرح کنم.
من دارم یک صفحه ای رو طراحی می کنم که توی اون مدیر سایت می تونه برای استفاده از سرویس های خاصی برای هر کاربر زمان استفاده ای رو مشخص کنه (مثلا 2 روز یا یک هفته).
حالا برای این کار چطوری میشه این کار رو انجام داد.
من خودم فکر می کنم که برای این کار باید اول زمان سرور رو بگیرم و زمان مربوطه رو بهش اضافی کنم (مثلا همون 2 روز) بعد توی دیتا بیس ذخیره کنم و هر زمانی که کاربر وارد محیط کاربریش شد زمان رو بخونم و شمارش معکوس رو براش بزارم و زمانی که زمان تموم شد سرویس رو براش غیر فعال کنم.
حالا اگه این گفته من درست باشه چندتا سؤال دارم:
1- چطوری می تونم به زمان حاضر یک زمان خاصی رو به روز اضافه کنم و زمان دلخواهم رو به دست بیارم؟
2- این تایمر رو چطوری می تونم با جاوا شبیه سازی کنم؟
3- بعد از تموم شدن زمان چطوری یک تابع رو (که شامل غیر فعال کردن سرویس و رفرش کردن صفحه است) اجرا کنم؟
از همه دوستان عزیز که کمک می کنن ممنونم.

sedamorde
سه شنبه 26 آبان 1388, 18:34 عصر
دوست عزیر تمام جواب هات پیش خودم, من این کار را کردم! فقط بگو بازی داری میسازی یا نه؟ ;)
من یک بازی ساختم و هزار مدل محاسبه را ساختم و تست کردم تا بالاخره کار کرد!
اگرمیخوای به زمان حاضر زمانی اضافه کنی این کد کمک میکنه:


$EndTime=mktime(date('H')+'ساعت',date('i')+'د قیقه',date('s')+'ثانیه',date('m')+'ماه ',date('d')+'روز',date('Y')+'سال');
اینطوری میتونی به زمان حاضر هر چقدر که دوست داری اضافه کنی. حالا اگر میخوای زمانی به دست آمده را به صورت معکوس با جاوا نشان بدی:


function timer(data, lnk)
{
dat=document.getElementById(data);
var time=(dat.innerHTML).split(":"); var done=0;
if (time[2]>0) time[2]--;
else
{
time[2]=59;
if (time[1]>0) time[1]--;
else
{
time[1]=59;
if (time[0]>0) time[0]--;
else { clearTimeout(id[data]); window.location.href=lnk; done=1;}
}
}
if (!done)
{
dat.innerHTML=time[0]+":"+time[1]+":"+time[2];
id[data]=setTimeout("timer('"+data+"', '"+lnk+"')", 1000);
}
}
html:


<span id="id1">1:30:25</span>
<script type="text/javascript">
var id=new Array(50); timer('id1' ,'link.php');
</script>
زمانی که تایمر 0 شد کاربر را به link.php یا هرجایی که بخوای میتونی بفرستی و هر تابع و کدی را میتونی اجرا کنی.

سوالی بود بگو, هر چقدر بیشتر توضیح بدی میخوای چیکار کنی من هم بیشتر میتونم کمک کنم ;)

mahmood3d
سه شنبه 26 آبان 1388, 19:25 عصر
علی آقا ممنون
من براتون توی مسنجر آف گذاشتم اگه امکان داره یک پیام برام بفرستین تا با هم گفتگو کنیم. من اکثرا آنلاینم.