آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

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

Leon  11 سال پیش  11 سال پیش
0 0

سلام 

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

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

توی پایگاه داده روی هاست یه جدول هست که دوتا فیلد داره ، یکی آیدی رکورد و دیگری 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();
    }

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

	
	
	
	

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

 

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

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

با ایجاد تغییراتی در تابع 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();
}

 

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

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