一、“NetConnection”简介:转述Matrix上zhengyun_ustc所述:“你的HttpConnection是否封装的足够健壮呢?遇到各种情况,你是否有信心应对呢?譬如说,你要请求的Response包实在太大,以至于运营商给你掐了告诉你说超时;譬如说你是不是总要自己写一个线程来专门作http连接?譬如说有一些移动运营商设置了caching proxy servers,妨碍了你的测试。”
为了解决这个问题,一位日本程序员“JAY-F”针对MIDP1.0提供了一种robust的“NetConnection”封装。这个HttpConnnection类负责管理连接并易于使用。
二、“NetConnection”特性:1. 跨过Proxy-server阻碍:
一些移动网络放置了代理用来提高访问速度,但是它的cache也成为了开发人员测试/调试程序的一大障碍。“NetConnection”类使用一个简单的http request属性将server上的代理功能关闭掉。
2. 使用线程分离的连接模式:
本类可以使用单线程、多线程两种模式运行,只要设置一个简单的标志即可。
3. 支持Http request range:
由于服务商在其网络上可能存在一些针对回应数据最大长度的限制,所以“NetConnection”类提供了构造request URL的功能使回应数据分为多个数据包。从而去除了前面的限制。
三、netConnection是如何实现的?1。netConnection类结构分析:
此类实现了Runnable接口,其运行模式支持多线程模式:当前只能由一个线程使用资源,其它线程wait。
此类使用了一些静态成员变量:
//当前只能由一个线程使用singleton。
private static NetConnection singleton = new NetConnection();
private static HttpConnection httpConn;
private static String url;
private static String method;
private static byte[] data;
private static String contentType;
private static long lowRange;
private static long highRange;
private static boolean disableProxy;
private static boolean detached;
private static byte[] response;
类方法:
//线程run方法
public void run()
//当前运行的线程执行完毕后,通报给其它的由于等待资源而wait状态的线程
private synchronized void forceNotify()
//当资源正在被其它线程使用时,当前线程进入wait状态
private synchronized void forceWait()
//关闭http连接
private static void severConnection()
由于使用了这些static成员变量,所以一些操作方法需要同步(synchronized)。
2。netConnection核心代码解析:
netConnection类的实现思想很简单,就是设置一些request属性和对于GET方法构造一个特殊的URL。更重要的是其作者对http的深入理解、严谨的代码风格值得吾辈学习、研究。这也是本人分析其核心代码的一大原因。
[1]
【责编:Peng】
--------------------next---------------------
阅读(341) | 评论(0) | 转发(0) |