بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ

مشکل در دریافت و ارسال مکرر داده به سرور

مدیریت گفتگو
Leon 11 سال پیش
آخرین تغییر: 11 سال پیش

سلام 

دارم روی یه برنامه وب سرویس تمرینی کار میکنم 

یه هاست رایگان از گیگفا برای اینکار گرفتم و پروژه تمرینی یه شمارنده آنلاینه

توی پایگاه داده روی هاست یه جدول هست که دوتا فیلد داره ، یکی آیدی رکورد و دیگری count

ارتباطی رو که برقرار میکنم از طریق متد GET انجام میشه

با هربار تاچ دکمه ، تابع ReadData فراخوانی میشه و مقدار فعلی Count رو از سرور میخونه و میریزه روی serverCount و البته قبل از اون با فراخوانی تابع PlusOneOnServer یکی به مقدار Count  در دیتابیس سرور اضافه میشه ، حالا مشکلی که هست اینه که خیلی کنده با اینکه سرعت اینترنت من خوبه و از اون مهم تر چندتا که میزنم مخصوصا اگر تندتر تاچ کنم هنگ میکنه و در نهایت isn't responding میده ، به نظر شما مشکل کار من کجاست 

 //رویداد کلیک دکمه 
       BtnPlus.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View arg0) {
                PlusOneOnServer();
                readData();
				
                String serverCountString = serverCount +"";
                
				if(serverCountString != null) {
                    txtShow.setText(serverCount + "");
                }
//رویداد کلیک دکمه 


//تابع اضافه کردن سمت کلاینت
    private void PlusOneOnServer() {
        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                Webservice.readUrl("http://leopark.gigfa.com/CounterUpdate.php?id=1");
            }
        });
        thread.start();
    }

//تابع اضافه کردن سمت کلاینت




//اضافه کننده سمت سرور

<?php
$connection=mysqli_connect("sql313.gigfa.com","gigfa","00","gigfa_db");
mysqli_set_charset($connection, 'UTF8');
if(mysqli_connect_errno())
{
    echo "Failed to connect to MySQL: " . mysqli_connect_errno();
}
$id = $_GET['id'];
mysqli_query($connection, "UPDATE CounterDB SET db_count = db_count+1 WHERE db_id=$id");
mysqli_close($connection);
?>

//اضافه کننده سمت سرور



//تابع خواندن 
private void readData() {
        result = Webservice.readUrl("http://leopark.gigfa.com/CounterPhp.php/");
        final Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                if (result != null) {
                    try {
                        tasks = new JSONArray(result);
                        task = tasks.getJSONObject((tasks.length()) - 1);
                        if (result != null) {
                            try {
                                serverCount = task.getInt("count");
                            } catch (Exception e) {
                                e.printStackTrace();
                            }
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }


            }
        });
        thread.start();
    }

//تابع خواندن 

	
	
	
	

پیشاپیش ممنون

 

نظرات

Leon 11 سال پیش
فکر کنم فهمیدم ، مشکل از هاست رایگانه گیگفاست ، چون بعد از چندبار مکرر درخواست ، صفحه php ، از دسترس خارج میشه برای چند دقیقه و This webpage is not available میگه
Leon 11 سال پیش
نه ، مشکل از هاست نبود ، بلکه حالا به نظرم مشکل از اینه که هربار با فراخوانی ReadData یه thread جدید ایجاد میشه اجرا می مونه و با چند تاچ با انبوهی از thread ها برنامه دیگه پاسخگو نیست ، حالا چیکار کنم؟ممنون
Spirit 11 سال پیش
اینکه اجرای چند باره یه ترد درست هست یا نه (اگه بود که هنگ نمیکرد) رو نمیدونم ولی این نکته پایینی رو چند روز پیش خوندم -- وقتی قراره ترد های زیادی اجرا بشن میتونید از ExecutorService لینک و لینک استفاده کنید، کارش به این صورت هست که شما میتونید به تعداد دلخواه ترد رو بهش واگذار کنید تا ترد ها همزمان ولی با تعداد مشخص اجرا کنه، مثلا میگید 10 تا ترد رو بگیر و دوتا دوتا اجرا کن، ترد اول و دوم رو اجرا میکنه وقتی مثلا ترد اول کارش تموم شد میره سراغ ترد سوم و الا آخر. (بررسی صحت و سقم برداشتم با شما :)
Leon 11 سال پیش
خیلی سپاسگزار اسپریت جان،کامنت شما مسیر ذهنیم رو اصلاح کرد
Leon 11 سال پیش
و بهترین و به صرفه ترین هاست برای اینکار از نظر شما دوستان ؟

پاسخ‌ها 1

Leon 11 سال پیش

با نام گذاری ترد ها متوجه شدم که همه ی کار ها روی دوش ترد اصلی افتاده بود و به همین خاطر هنگ میکرد 

با ایجاد تغییراتی در تابع readData  و البته استفاده از لوکال هاست مشکلم حل شد 

و حالا سوال اینکه آیا هاست پولی به خوبیه لوکال هاست عمل میکنه ؟ هاست چه شرکتی تعداد مراجعه ی مکرر و زیاد رو جوابگوست؟

مرسی ازتون

 

    private void readData() {

  if( !(thread.isInterrupted()) ) { thread.interrupt(); } thread = new Thread(new Runnable() { @Override public void run() { Webservice.readUrl("localhost/note-server/CounterUpdate.php?id=1"); result = Webservice.readUrl("localhost/note-server/Counter.php/");
if (result != null) { try { tasks = new JSONArray(result); task = tasks.getJSONObject((tasks.length()) - 1); } catch (JSONException e) { e.printStackTrace(); } } handler.post(new Runnable() { @Override public void run() { try { btnStatus.setText(task.getInt("count") + ""); } catch (Exception e) { e.printStackTrace(); } } }); } }); thread.start();
}

 

نظرات

Leon 11 سال پیش
و بهترین و به صرفه ترین هاست برای اینکار از نظر شما دوستان ؟

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .