Kiến trúc Nhận biết mạng linh hoạt (Flexibly Network Aware – FNA)

Một phần của tài liệu Nhom15_Network-and-Real-User (Trang 28 - 31)

Không phải ở mọi vị trí, mọi nơi đều có kết nối mạng lý tưởng (điều kiện kết nối mạng tốt) vì dựa trên số liệu khảo sát, có rất nhiều vùng, khu vực vẫn đang còn sử dụng các nền mạng 2G, 3G và có những nơi được cung cấp mạng 4G, Wi-Fi. Do đó việc nhận biết người dùng ứng dụng kết nối mạng với điều kiện ít lý tưởng hơn và vận dụng những thủ thuật để nâng cao trải nghiệm người dùng trên các nền điều kiện mạng đó là điều cần thiết trong quá trình phát triển ứng dụng của bạn. Ở đây ta dùng kiến trúc Nhận biết mạng linh hoạt – FNA vào việc phát triển ứng dụng bằng một số đoạn code dưới đây:

Truy vấn tới Trình quản lý điện thoại – Telephony Manager để nhận biết “netType”:

TelephonyManager teleMan =

(TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);

int networkType = teleMan.getNetworkType(); switch (networkType) {

case 1:

netType = "GPRS"; networkSpeed = "slow";

break; case 2: netType = "EDGE"; networkSpeed = "slow"; break; case 3: netType = "UMTS"; networkSpeed = "medium"; break;

// we'll leave out a few network types, but you get the idea. case 13:

netType = "LTE";

networkSpeed = "fast"; break;

}

Bằng cách truy vấn trạng thái mạng định kỳ, FNA sẽ cải thiện hoặc hạn chế chất lượng tải dữ liệu trên ứng dụng của bạn. Hoặc bạn có thể làm nâng cao hơn khi phân tích đến tín hiệu mạng 3G hoặc 4G hoặc Wi-Fi của người dùng “mạnh”, “yếu” hay là “trung bình”. Cụ thể ở đây, với đã thiết lập được kiểu mạng, độ mạnh yếu của tín hiệu mạng, ta dùng để tải quyết định tải xuống và hiển thị dữ liệu hình ảnh lên ứng dụng:

switch (networkSpeed) { case "fast":

new ImageDownloader().execute(urlbig); //image is 143KB break;

case "medium":

case "slow":

new ImageDownloader().execute(urlsmall); //image is 27KB break;

}

Nâng cao hơn nữa, ta có thể tính toán thông lượng thực của tệp dữ liệu theo Kb/s trên ứng dụng bằng việc ghi lại khoảng thời gian “t” bằng cách đo quãng thời gian nhận và gửi requests/responses và ước tính độ trễ của mạng. Qua đó đưa ra các thuật toán hợp lý cho dữ liệu gửi đi từ phía server:

private Bitmap downloadBitmap(String url) { //download start time

Long start = System.currentTimeMillis();

final DefaultHttpClient client = new DefaultHttpClient(); final HttpGet getRequest = new HttpGet(url);

try {

HttpResponse response = client.execute(getRequest); //check 200 OK for success

final int statusCode = response.getStatusLine().getStatusCode(); //time 200 response received

Long gotresponse = System.currentTimeMillis(); }

final HttpEntity entity = response.getEntity(); //get ContentLength of file

contentlength = entity.getContentLength(); if (entity != null) {

InputStream inputStream = null; try {

final Bitmap bitmap = BitmapFactory.decodeStream(inputStream); Long gotimage = System.currentTimeMillis();

//time image download completed responsetime = gotresponse - start; //time to the 200 ok response imagetime = gotimage-start; //download time ~~ KB/s throughput = ((double)contentlength/1024)/((double)imagetime/1000); return bitmap; } } }

Nếu tệp lớn được sử dụng với điều kiện mạng lý tưởng, mạnh thì việc áp dụng kiến trúc FNA vào ứng dụng của bạn là không cần thiết. Nhưng rõ ràng, người dùng sử dụng ứng dụng trên nền mạng UMTS (3G) và mạng EDGE (2.75G) chậm hơn đáng kể do gặp phải tệp với kích thước lớn. Và khi áp dụng kiến trúc FNA, tải xuống dữ liệu ở mạng UMTS nhanh hơn ~ 100%, và ở mạng EDGE là nhanh hơn ~ 300%. Với mô hình đơn giản này, ta có thể thấy tiềm năng cải thiện tương tác của người dùng với ứng dụng.

Việc thu thập CSDL về độ trễ và thông lượng trên hệ thống tạo mạng và cường độ tín hiệu có thể cho phép bạn xây dụng một thuật toán tốt hơn cho phép ứng dụng của bạn linh hoạt với kết nối mạng hơn và thực tế hơn, qua đó đem lại lợi ích tốt về việc trải nghiệm người dùng.

Một phần của tài liệu Nhom15_Network-and-Real-User (Trang 28 - 31)

Tải bản đầy đủ (DOCX)

(47 trang)
w