رفتن به مطلب
  • 0

نمایش آفلاین شدن کاربر در چت


mohamad_a226

سوال

سلام

من اپلیکیشن چت رو با سوکت درست کردم، ولی یه مشکلی تو تشخیص آفلاین شدن کاربرا دارم.

وقتی مثلا من به عنوان کاربر آنلاین بشم، از طریق سوکت تو سرور ثبت میشه و کاربرای دیگه می بینن که من آنلاین هستم.

ولی وقتی که مثلا یهو اینترنتم قطع بشه، دیگه در واقع ارتباط با سرور قطع شده و نمیشه سوکتی ارسال کرد به سمت سرور که بگم من آفلاین شدم.

این تشخیص رو باید چطور انجام داد؟ ممنون میشم اگه کسی میدونه راهنمایی کنه. 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

6 پاسخ به این سوال تاکنون داده شده است

ارسال‌های توصیه شده

در در ۱۴۰۰/۲/۲۶ در ۰۸:۴۷، M-CAP۷AIN گفته است :

سمت سرور از متد پیشرفرض disconnect استفاده کنید ، از داخل داکیومنت socket.io چک کنید ، احتمالا نسخه ۳ یا ۲ کتابخونه متدش متفاوت باشه.


socket.on('disconnect', function() {

 

 

برای دیسکانکت این متد رو استفاده کردم که یوزر از لیست کاربرای آنلاین پاک بشه. ولی خب چون اینترنت قطع هست نمیتونم ایونت دیسکانکت رو به سمت سرور پاس بدم. واسه همین یوزر هم تو اون لیست باقی میمونه.

این متد دیسکانکت رو سمت سرور نوشتم:

        socket.on('Disconnect', function(userid) {
            for( var i = 0; i < onlineuser.length; i++){

                if ( onlineuser[i] === userid) {
                    onlineuser.splice(i, 1);
                    i--;
                }
            }
            io.emit('Online_user', onlineuser);
        });

 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

بستگی به نوع سوکت داره اگه از socket.io استفاده می کنید به صورت یک رویداد قطع ارتباط و دریافت می کنید

اما اگه از سوکت tcp استفاده می کنید (برای اپ با کاربر زیاد ، جالب نیست) بهتره یه تایمر بزارید هر چند ثانیه یه پیامی برای همه کلاینت بفرسته ، تو بخش کلاینتم با یه تایمر چک کنید اگه مقداری دریافت شد ، ارتباط هنوز برقراره در غیر این صورت ، قطع ارتباط.

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در در ۱۴۰۰/۲/۲۲ در ۱۰:۵۰، M-CAP۷AIN گفته است :

بنظرم دو تا راه هست

  1. از ConnectivityManager و BroadcastReceiver استفاده کنید (برای قطع و وصل شدن وای فای و دیتا)
  2. هر 3 ثانیه یا هر 5 ثانیه یه پیامی سمت سوکت بفرستید ، اگه سرور جواب داد ارتباط برقرار

 

به این مثال هم یه نگاه بندازید

خیلی ممنون از راهنماییتون.

BroadcastReceiver رو تنظیم کردم که موقع قطع شدن اینترنت خودم متوجه میشم ولی چون ارتباطم با سرور قطع شده و اتصال اینترنت برقرار نیست، نمیتونم به سمت سوکت پیامی ارسال کنم و اطلاع بدم که اینترنتم قطع شده. واسه همین آنلاین میمونم. در واقع الان سمت سرور برای بررسی آنلاین و آفلاین بودن کاربر این کد رو نوشتم:

var onlineuser = [];
socket.on('Online', function(userid) {
	if (onlineuser.indexOf(userid) < 0){
		onlineuser.push(userid);
	}
io.emit('Online_user',onlineuser);
});

موقع آفلاین شدن هم باز آیدی یوزر به سمت سوکت پاس داده میشه و آیدی از لیست onlineuser حذف میشه. وقتی event آفلاین شدن سمت سرور دریافت نشه، آیدی تو لیست باقی میمونه و میزنه آنلاین هستش.

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

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در 2 ساعت قبل، M-CAP7AIN گفته است :

بستگی به نوع سوکت داره اگه از socket.io استفاده می کنید به صورت یک رویداد قطع ارتباط و دریافت می کنید

اما اگه از سوکت tcp استفاده می کنید (برای اپ با کاربر زیاد ، جالب نیست) بهتره یه تایمر بزارید هر چند ثانیه یه پیامی برای همه کلاینت بفرسته ، تو بخش کلاینتم با یه تایمر چک کنید اگه مقداری دریافت شد ، ارتباط هنوز برقراره در غیر این صورت ، قطع ارتباط.

ممنون از پاسخگوییتون. از socket.io استفاده میکنم. چطور میتونم قطع ارتباط رو متوجه بشم؟

موقع خروج کاربر از چت، متوجه قطع ارتباط میشم، ولی وقتی اتصال اینترنت قطع میشه، چطور میشه متوجه شد؟

لینک ارسال
به اشتراک گذاری در سایت های دیگر

سمت سرور از متد پیشرفرض disconnect استفاده کنید ، از داخل داکیومنت socket.io چک کنید ، احتمالا نسخه ۳ یا ۲ کتابخونه متدش متفاوت باشه.

socket.on('disconnect', function() {

 

 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

بنظرم دو تا راه هست

  1. از ConnectivityManager و BroadcastReceiver استفاده کنید (برای قطع و وصل شدن وای فای و دیتا)
  2. هر 3 ثانیه یا هر 5 ثانیه یه پیامی سمت سوکت بفرستید ، اگه سرور جواب داد ارتباط برقرار

 

به این مثال هم یه نگاه بندازید

لینک ارسال
به اشتراک گذاری در سایت های دیگر

بایگانی شده

این موضوع بایگانی و قفل شده و دیگر امکان ارسال پاسخ نیست.

  • کاربران آنلاین در این صفحه   0 کاربر

    • هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.
×
×
  • اضافه کردن...