java - Android 弱网络环境下与服务器交互怎么实现???
巴扎黑
巴扎黑 2017-04-18 10:30:03
0
11
1112

现在项目上有这么个需求,客户拿着APP去一个深山老林里(或者去一个偏僻的村庄)去和核查情况,网络情况不是很好,有可能是2G网络 也有可能时刻断网,但是他要通过APP与服务器交互了,首先是登录就要与服务器交互,然后紧接着获取一些核查规则来查看,这些都是返回的json字符串,手机端进行解析,但是这种弱网络情况请求应该会很慢很慢吧,有没有一种方式能够变快呢? 我查阅了一些资料,网上说:服务端通过将数据压缩后然后传递给客户端,客户端在进行解压,在解析json并展示···· 哪位大神遇到过这种需求。求给个思路。谢谢!

巴扎黑
巴扎黑

répondre à tous(11)
伊谢尔伦
可以采用Gzip压缩,缩小请求数据的大小,提高网络传输速度。
使用gzip,首先要设置请求消息头Accept-Encoding为gzip。这样,你将会得到一个响应,根据消息头Content-Encoding为gzip你可以知道,传输过来的数据是经过gzip压缩的。另外,消息头Content-Length会告诉你压缩后的数据长度。
客户端
GetMethod method = new GetMethod(url);//生成一个get方法实例  
  
method.setQueryString(queryString);//设置查询字符串  
method.addRequestHeader("Accept-Encoding", "gzip");//设置接受响应消息为gzip  
  
HttpClient client = new HttpClient();//生成执行get方法的客户端实例  
client.executeMethod(method);//执行get方法  
  
InputStream in = method.getResponseBodyAsStream();//获取响应消息体  
Header contentEncoding = method.getResponseHeader("Content-Encoding");//获取消息头Content-Encoding判断数据流是否gzip压缩过  
  
if (contentEncoding != null && contentEncoding.getValue().equalsIgnoreCase("gzip")) {  
    GZIPInputStream gzipIn = new GZIPInputStream(in);  
    int len = Integer.parseInt(method.getResponseHeader("Content-Length").getValue());  
    byte[] b = new byte[len];  
    gzipIn.read(b);  
      
    String json = new String(b);  
    System.out.println(json);  
}  

服务端
byte[] result = data.getBytes("UTF-8");  
  
if(response.getHeader("Accept-Encoding").equalsIgnoreCase("gzip"))  
{  
    // System.out.println("Before compression, the data size is :"+ result.length);  
    // Using gzip compress the data  
    ByteArrayOutputStream out = new ByteArrayOutputStream();  
    GZIPOutputStream gout = new GZIPOutputStream(out);  
    gout.write(json.getBytes("UTF-8"));  
    gout.close();  
    result = out.toByteArray();  
  
    // System.out.println("After compression, the data size is "+gzipResult.length);  
    this.getResp().setHeader("Content-Encoding","gzip");  
    this.getResp().setHeader("Content-Length", result.length+"");  
}  
  
response.getOutputStream().write(result);  
黄舟

La compression des données est utilisée pour réduire la quantité de transmission de données. Elle peut augmenter la vitesse sur un réseau faible, mais elle sera inutile sans réseau. Est-il possible de créer un modèle de prédiction et de prédire le pré-envoi du contenu de la demande au cours de la prochaine période en fonction des paramètres pertinents fournis par l'application ?

刘奇

Mettez en cache la dernière requête. Le serveur ne fournira le contenu modifié que dans des conditions de réseau faibles et insérera le contenu modifié dans le dernier cache pour l'afficher. Ce réseau est le plus économique.

黄舟

Mise en cache des données, les données demandées peuvent être mises en cache localement pour l'affichage des données. Les données qui doivent être téléchargées peuvent également être d'abord mises en cache localement et transmises lorsque le signal réseau est bon. Attendez l'échec de la reconnexion,

小葫芦

La compression est nécessaire pour améliorer l'efficacité de la transmission du réseau et réduire autant que possible le temps d'interaction des requêtes.
Faites également attention à éviter les soumissions en double. (Garantir l'idempotence de certaines interfaces)

迷茫

Un réseau faible signifie qu'il existe un réseau. Tant que vous vous assurez que le réseau est constamment connecté avant que le serveur ne réponde, il sera facile de résoudre que la taille du corps de la requête et du corps renvoyé soit suffisamment petite pour avoir. pas d'amis. Compressez autant que possible... dès réception de la réponse, analysez-la simplement sur le client.

Ty80

La mise en cache des données est nécessaire pour garantir que les données précédentes sont affichées sur la page avant que de nouvelles données ne soient obtenues ; les données qui ont été lues sont mises en cache pour éviter les requêtes réseau répétées. La compression des données est mentionnée ci-dessus ;

阿神

Utilisez XML pour transférer des données, enregistrez-les localement et affichez les données locales lorsqu'il n'y a pas de connexion réseau

黄舟

SQLite stocke une partie des données. Les données sensibles sont abrégées en longueur de paramètre. Déterminez s'il existe une valeur de retour de http, puis renvoyez-la à nouveau

.
小葫芦

Il existe quelque chose qui s'appelle MQTT

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal