2014-02-06 3 views
1

Я создаю приложение для Android, чтобы как можно быстрее получать информацию с сервера. Меня не интересует безопасность или время автономной работы. Сообщения, скорее всего, будут небольшими, но будут быстро (каждые несколько секунд). Коммуникация будет в первую очередь однонаправленной, однако способность приложения к общению с сервером будет дополнительным бонусом.Быстрая связь с сервером Android

Я смотрел Google Cloud Messaging (GCM), однако есть смешанные сообщения о скорости этого.

Как это сравнить с точки зрения скорости, чтобы сказать соединение HTTP/JSON? или настроить сокет, к которому подключится сервер, и нажать на сообщение?

Есть ли другие альтернативы, которые я не рассматривал?

EDIT: Это работает исключительно через WiFi

+0

вы должны попробовать веб-сокет вместо простой HTTP веб-службы call..web сокет сделать упорствовать соединение с сервером, всякий раз, когда есть какая-то вещь для совместного использования на сервере. Сервер должен транслировать его, чтобы клиент мог получать эти данные по уже сделанному соединению. –

ответ

1

Socket io обеспечивает постоянное соединение с сервером, так что это довольно быстро (время не разрешишь на подключение каждый раз).

0

Вы можете достичь этого, используя концепцию под названием Long Polling

Типичная реализация выглядит следующим образом:

@Override 
    protected String doInBackground(String... arg0) { 
    String result= TIME_OUT; //public static final String TIME_OUT = time_out_error" 
    while(result.equals(TIME_OUT)) 
     result = getServerInformation(); 

    return result; 
    } 




public String getServerInformation(){ 
     String result = null; 
     DefaultHttpClient def = new DefaultHttpClient(); 
     HttpParams httpParams = def.getParams(); 
     HttpConnectionParams.setConnectionTimeout(httpParams, CONNECTION_TIMEOUT); 

     ConnManagerParams.setTimeout(httpParams, CONNECTION_TIMEOUT); 
     HttpPost httpPost = new HttpPost(mPushURL); 
     httpPost.addHeader("Accept", "application/json"); 

     try { 
      Log.i(TAG, "Executing POST(PUSH) request " + httpPost.getRequestLine()); 

      HttpResponse httpResponse = def.execute(httpPost); 
      Log.i(TAG, result); 
      Log.i(TAG, String.valueOf(httpResponse.getProtocolVersion())); 
      Log.i(TAG, String.valueOf(httpResponse.getEntity().getContent())); //For testing purposes 


     } catch (ClientProtocolException e) { 
       e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
//HERE YOU SHOULD TURN result = TIME_OUT or whatever you want 
     return result; 

    } 
Смежные вопросы