PDA

View Full Version : لیست افراد حاضر در سایت به صورت زنده Live با چک ثانیه ای



alirayaneh
جمعه 27 اسفند 1389, 20:04 عصر
سلام دوستان یکی از روشهای چک کردن افراد حاضر در سایت : ذخیره زمان ورود کاربر به سایت در دیتابیس است و سپس
در لیست نمایش افراد آنلاین تو سط یک زبان سمت سرور مثل php یا asp و.. یه دستور select ساده از دیتابیس مینویسیم
مثل دستور زیر

$onlineTime=time()-300;
select * from 'user' where EnterTime>$onlineTime
خوب همونطور که میبینید ما در دستور بالا یه متغیر ایجاد کردیم که مقدار زمان 5 دقیقه قبل رو توی اون ذخیره کردیم

بعد در دستور select از بانک اطلاعاتی تمامی user هایی رو که زمان ورودشون از 5 دقیقه قبل به بعد است رو انتخاب کردیم و بعد این یوزر یا نام یوزر هایی رو که از بانک اطلاعاتی انتخاب شده رو چاپ میکنیم

این روند کلی نمایش افراد آنلاین یا افراد حاضر در سایته

اما چطور میتونیم یه لیست زنده با کیفیت یا اطلاعات لحظه به لحظه یا ثانیه ای افراد حاضر در سایت داشته باشیم

خوب برای این کار روشی رو که من از طریق بکار گیری Ajax به کار بردم این بود که از طریق یه تابع جاوا

setInterval('ajax function',1000)
هر یک ثانیه تابع آجاکس رو اجارا کردم

این تابع آجاکس مقادیری رو از یه صفحه پی اچ پی دریافت میکنه و پس از دریافت در لیست افراد آنلاین چاپ میکنه

و در اون صفحه پی اچ پی هم دستوری نوشتم که توسط یه دستور update ساده مثل زیر
username = sessino[username]
update user SET EnterTime=time() where username=$username

وبعد


$onlineTime=time()-2;
select * from 'user' where EnterTime>$onlineTime

به همین سادگی
من این روش رو پیشنهاد نمیکنم http://barnamenevis.org/images/icons/icon11.png
چون سرور رو میخابونه http://barnamenevis.org/images/icons/icon9.png
به همین سادگی
در نظر بگیرید اگر همزمان 30 کاربر به سایت وارد شن و هر کدوم به طور متوسط 5 دقیقه یا بهتر بگم 300 ثانیه در سایت بمونن و مقدار اطلاعاتی رو که بین سرور و صفحه کلاینت یا کاربر مبادله میشه رو بر حسب بایت 1 کیلو بایت ( حداقل) باشه
در هر ثانیه 300 کیلو بایت باید با سرور مبادله داشته باشیم و همچنین و با توجه به این که ممکنه هر کاربر مدتی رو در سایت بمونه و علاو بر اون ممکنه که صفحهات مختلفی مختلفی رو به صورت جدا گانه باز کنه و هم فایلی رو دانلود کنه و..
به ازای هر صفحه که بصورت جداگانه باز کرده 1*300 در نظر میگیریم و فعالیت های دیگه رو هم اضافه کنید
در واقع این روش به علت استفاده از کد های جاوا فشار زیادی رو هم به cpu سرور میاره


اما روش دیگه ای که وجود داره اینه که ما برای هر کاربر که وارد سایت میشه مقدار مثلا
stute = on
در نظر بگیریم و در زمان خروج مقدار stute رو برابر با off برای کاربر در تیبل user ذخیره کنیم
و در صفحه php مربوط به آجاکس فقط یوزر هایی رو که stute = on هست رو چاپ کنیم میشه فشار رو از سرور کمتر کرد

اما مشکلی که برای این روش هم وجود داره و من هم هنوز راه حلش رو برسی نکردم اینه که در همین حین اگر کاربر صفحه سایت رو ببنده اسمش از لیست افراد آنلاین حذف نمیشه یا حداقل بصورت زنده و همزمان حذف نمیشه...

من امروز 5 ساعت با این کدا کار کردم ذهنم الا مسدود شده از دوستانی که هنوز ذهنشون مسدود نشده میخوام برسی کنند ببینن راه حل این مشکل چیه البته

البته من با یه ایونت خروج خاستم بصورت آجاکس مجدد مقدار stute = off رو برای کاربر ذخیره کنم ولی موفق نشدم

onunload(ajax func

با تشکر

L u k e
یک شنبه 29 اسفند 1389, 12:50 عصر
مثل اینکه اشتباه تشریف آوردی
سوالت رو توی بخش جاوا اسکریپت مطرح کن

javaphantom
یک شنبه 29 اسفند 1389, 16:42 عصر
سلام دوستان یکی از روشهای چک کردن افراد حاضر در سایت : ذخیره زمان ورود کاربر به سایت در دیتابیس است و سپس
در لیست نمایش افراد آنلاین تو سط یک زبان سمت سرور مثل php یا asp و.. یه دستور select ساده از دیتابیس مینویسیم
مثل دستور زیر

$onlineTime=time()-300;
select * from 'user' where EnterTime>$onlineTime
خوب همونطور که میبینید ما در دستور بالا یه متغیر ایجاد کردیم که مقدار زمان 5 دقیقه قبل رو توی اون ذخیره کردیم

بعد در دستور select از بانک اطلاعاتی تمامی user هایی رو که زمان ورودشون از 5 دقیقه قبل به بعد است رو انتخاب کردیم و بعد این یوزر یا نام یوزر هایی رو که از بانک اطلاعاتی انتخاب شده رو چاپ میکنیم

این روند کلی نمایش افراد آنلاین یا افراد حاضر در سایته

اما چطور میتونیم یه لیست زنده با کیفیت یا اطلاعات لحظه به لحظه یا ثانیه ای افراد حاضر در سایت داشته باشیم

خوب برای این کار روشی رو که من از طریق بکار گیری Ajax به کار بردم این بود که از طریق یه تابع جاوا

setInterval('ajax function',1000)
هر یک ثانیه تابع آجاکس رو اجارا کردم

این تابع آجاکس مقادیری رو از یه صفحه پی اچ پی دریافت میکنه و پس از دریافت در لیست افراد آنلاین چاپ میکنه

و در اون صفحه پی اچ پی هم دستوری نوشتم که توسط یه دستور update ساده مثل زیر
username = sessino[username]
update user SET EnterTime=time() where username=$username

وبعد


$onlineTime=time()-2;
select * from 'user' where EnterTime>$onlineTime

به همین سادگی
من این روش رو پیشنهاد نمیکنم http://barnamenevis.org/images/icons/icon11.png
چون سرور رو میخابونه http://barnamenevis.org/images/icons/icon9.png
به همین سادگی
در نظر بگیرید اگر همزمان 30 کاربر به سایت وارد شن و هر کدوم به طور متوسط 5 دقیقه یا بهتر بگم 300 ثانیه در سایت بمونن و مقدار اطلاعاتی رو که بین سرور و صفحه کلاینت یا کاربر مبادله میشه رو بر حسب بایت 1 کیلو بایت ( حداقل) باشه
در هر ثانیه 300 کیلو بایت باید با سرور مبادله داشته باشیم و همچنین و با توجه به این که ممکنه هر کاربر مدتی رو در سایت بمونه و علاو بر اون ممکنه که صفحهات مختلفی مختلفی رو به صورت جدا گانه باز کنه و هم فایلی رو دانلود کنه و..
به ازای هر صفحه که بصورت جداگانه باز کرده 1*300 در نظر میگیریم و فعالیت های دیگه رو هم اضافه کنید
در واقع این روش به علت استفاده از کد های جاوا فشار زیادی رو هم به cpu سرور میاره


اما روش دیگه ای که وجود داره اینه که ما برای هر کاربر که وارد سایت میشه مقدار مثلا
stute = on
در نظر بگیریم و در زمان خروج مقدار stute رو برابر با off برای کاربر در تیبل user ذخیره کنیم
و در صفحه php مربوط به آجاکس فقط یوزر هایی رو که stute = on هست رو چاپ کنیم میشه فشار رو از سرور کمتر کرد

اما مشکلی که برای این روش هم وجود داره و من هم هنوز راه حلش رو برسی نکردم اینه که در همین حین اگر کاربر صفحه سایت رو ببنده اسمش از لیست افراد آنلاین حذف نمیشه یا حداقل بصورت زنده و همزمان حذف نمیشه...

من امروز 5 ساعت با این کدا کار کردم ذهنم الا مسدود شده از دوستانی که هنوز ذهنشون مسدود نشده میخوام برسی کنند ببینن راه حل این مشکل چیه البته

البته من با یه ایونت خروج خاستم بصورت آجاکس مجدد مقدار stute = off رو برای کاربر ذخیره کنم ولی موفق نشدم

onunload(ajax func

با تشکر

من کاری ندارم که با چه زبونی داری کار می کنی ولی چیزی هست به نام session که رابطی هست بین client و server این همه select زدن و جنگلوک بازی نداره. اگر session باشه یعنی طرف هست. اگر session نباشه یارو نیست. می تونی یک thread بزاری هر چند مدت تو servlet context ببین کدوم session ها هستن و تعداد اون ها رو به روز کنه. select هزینه داره دایی.