WEB开发网      濠电姷鏁告慨鐑藉极閸涘﹦绠鹃柍褜鍓氱换娑欐媴閸愬弶鎼愮痪鍓ф嚀閳规垿鎮╃€圭姴顥濋梺姹囧€楅崑鎾诲Φ閸曨垰绠涢柛顐f礃椤庡秹姊虹粙娆惧剳闁哥姵鍔欐俊鐢稿礋椤栨艾鍞ㄩ梺闈浤涙担鎻掍壕闁圭儤顨嗛埛鎺楁煕閺囥劌浜滄い蹇e弮閺屸€崇暆鐎n剛鏆犻柧浼欑到閵嗘帒顫濋悡搴d画缂佹鍨垮缁樻媴缁涘娈┑顔斤公缁犳捇銆佸鎰佹▌濠电姭鍋撳ù锝囩《閺€浠嬫煟濡鍤嬬€规悶鍎辫灃闁绘ê寮堕崯鐐电磼閸屾氨效鐎规洘绮忛ˇ瀵哥棯閹佸仮鐎殿喖鐖煎畷鐓庘槈濡警鐎崇紓鍌欑劍椤ㄥ棗鐣濋幖浣歌摕闁绘棃顥撻弳瀣煟濡も偓閻楀棗鈻撳Δ鍛拺閻犲洠鈧櫕鐏€闂佸搫鎳愭慨鎾偩閻ゎ垬浜归柟鐑樼箖閺呮繈姊洪棃娑氬婵☆偅鐟╅、娆掔疀閺冨倻鐦堥梺姹囧灲濞佳勭閿曞倹鐓曢柕濞垮劤閸╋絾顨ラ悙鏉戝妤犵偞锕㈤、娆撴嚃閳哄骞㈤梻鍌欐祰椤鐣峰Ο鑲╃煋妞ゆ棁锟ユ禍褰掓煙閻戞ɑ灏ù婊冪秺濮婅櫣绱掑Ο铏逛桓闂佹寧娲嶉弲娑滅亱闂佸憡娲﹂崹閬嶅煕閹达附鐓欓柤娴嬫櫅娴犳粌鈹戦垾鐐藉仮闁诡喗顨呴埥澶愬箳閹惧褰囩紓鍌欑贰閸犳牠顢栭崨鎼晣闁稿繒鍘х欢鐐翠繆椤栨粎甯涙繛鍛喘濮婄粯鎷呴悷閭﹀殝缂備浇顕ч崐鍨嚕缂佹ḿ绡€闁搞儯鍔嶅▍鍥⒑缁嬫寧婀扮紒瀣崌瀹曘垽鎮介崨濠勫幗闁瑰吋鐣崹濠氬煀閺囥垺鐓ユ慨妯垮煐閻撶喖鐓崶銉ュ姢缂佸宕电槐鎺旂磼濡偐鐣虹紓浣虹帛缁诲牆鐣峰鈧俊姝岊槺缂佽鲸绻堝缁樻媴缁涘娈愰梺鎼炲妺閸楀啿鐣烽鐐茬骇闁瑰濮靛▓楣冩⒑缂佹ɑ鈷掗柍宄扮墦瀵偊宕掗悙瀵稿幈闂佹娊鏁崑鎾绘煛閸涱喚鎳呮俊鍙夊姇铻i悶娑掑墲閺傗偓闂備胶绮崝鏇炍熸繝鍥у惞闁绘柨鐨濋弨鑺ャ亜閺冨洦顥夐柛鏂诲€濋幗鍫曟倷閻戞ḿ鍘遍梺鍝勬储閸斿本鏅堕鐐寸厱婵炲棗绻掔粻濠氭煛鐏炵晫效鐎规洦鍋婂畷鐔碱敆閳ь剙鈻嶉敐鍥╃=濞达絾褰冩禍鐐節閵忥絾纭炬い鎴濇川缁粯銈i崘鈺冨幍闁诲孩绋掑玻璺ㄧ不濮椻偓閺屻劌鈽夊Ο澶癸絾銇勯妸锝呭姦闁诡喗鐟╅、鏃堝礋椤撴繄绀勯梻鍌欐祰椤曟牠宕伴弽顐ょ濠电姴鍊婚弳锕傛煙椤栫偛浜版俊鑼额嚙閳规垿鍩勯崘銊хシ濡炪値鍘鹃崗妯侯嚕鐠囨祴妲堥柕蹇曞閳哄懏鐓忓璺虹墕閸旀挳鏌涢弬娆炬Ш缂佽鲸鎸婚幏鍛矙鎼存挸浜鹃柛婵勫劤閻挾鎲搁悧鍫濈瑨闁哄绶氶弻鐔煎礈瑜忕敮娑㈡煛閸涱喗鍊愰柡灞诲姂閹倝宕掑☉姗嗕紦 ---闂傚倸鍊搁崐鎼佸磹閻戣姤鍊块柨鏃堟暜閸嬫挾绮☉妯哄箻婵炲樊浜滈悡娑㈡煕濞戝崬骞樻い鏂挎濮婅櫣鎹勯妸銉︾彚闂佺懓鍤栭幏锟�
开发学院WEB开发Jsp 关于J2ME网络应用程序的性能探讨 阅读

关于J2ME网络应用程序的性能探讨

 2008-01-05 19:41:38 来源:WEB开发网 闂傚倸鍊搁崐鎼佸磹妞嬪孩顐芥慨姗嗗厳缂傛氨鎲稿鍫罕闂備礁婀遍搹搴ㄥ窗閺嶎偆涓嶆い鏍仦閻撱儵鏌i弴鐐测偓鍦偓姘炬嫹闂傚倸鍊搁崐鎼佸磹妞嬪海鐭嗗〒姘e亾妤犵偛顦甸弫鎾绘偐閹绘帞鈧參姊哄Ч鍥х仼闁诲繑鑹鹃悾鐑藉蓟閵夛妇鍘甸梺瑙勵問閸犳牠銆傛總鍛婄厱閹艰揪绱曟牎闂侀潧娲ょ€氫即鐛幒妤€绠f繝闈涘暙娴滈箖鏌i姀鈶跺湱澹曟繝姘厵闁绘劦鍓氶悘杈ㄤ繆閹绘帞澧涚紒缁樼洴瀹曞崬螖閸愬啠鍓濈换娑樼暆婵犱胶鏁栫紓浣介哺閹瑰洤鐣烽幒鎴僵闁瑰吀鐒﹂悗鎼佹⒒娴g儤鍤€闁搞倖鐗犻獮蹇涙晸閿燂拷濠电姷鏁告慨鐑藉极閸涘﹥鍙忔い鎾卞灩缁狀垶鏌涢幇闈涙灈鐎瑰憡绻冮妵鍕箻鐎靛摜鐣奸梺纭咁潐濞茬喎顫忕紒妯肩懝闁逞屽墮宀h儻顦查悡銈夋煏閸繃鍋繛宸簻鎯熼梺瀹犳〃閼冲爼宕濋敃鈧—鍐Χ閸℃鐟愰梺鐓庡暱閻栧ジ宕烘繝鍥у嵆闁靛骏绱曢崢顏堟⒑閹肩偛鍔楅柡鍛⊕缁傛帟顦寸紒杈ㄥ笚濞煎繘鍩℃担閿嬵潟闂備浇妗ㄩ悞锕傚箲閸ヮ剙鏋侀柟鍓х帛閺呮悂鏌ㄩ悤鍌涘闂傚倸鍊搁崐鎼佸磹妞嬪孩顐芥慨姗嗗厳缂傛氨鎲稿鍫罕闂備礁婀遍搹搴ㄥ窗閺嶎偆涓嶆い鏍仦閻撱儵鏌i弴鐐测偓鍦偓姘炬嫹  闂傚倸鍊搁崐鎼佸磹閻戣姤鍤勯柤鍝ユ暩娴犳氨绱撻崒娆掑厡缂侇噮鍨堕妴鍐川閺夋垹鍘洪悗骞垮劚椤︻垶宕¢幎鑺ョ厪闊洦娲栨牎闂佽瀵掗崜鐔奉潖閾忓湱纾兼俊顖氭惈椤矂姊虹拠鑼婵ǜ鍔戦崺鈧い鎺嶇閸ゎ剟鏌涢幘璺烘瀻妞ゎ偄绻愮叅妞ゅ繐瀚悗顓烆渻閵堝棙绀€闁瑰啿閰e畷婊勫鐎涙ǚ鎷洪梻渚囧亞閸嬫盯鎳熼娑欐珷妞ゆ柨澧界壕鐓庮熆鐠虹尨鍔熺紒澶庢閳ь剚顔栭崰鏍€﹂柨瀣╃箚婵繂鐭堝Σ鐑芥⒑缁嬫鍎愰柟鐟版搐铻為柛鎰╁妷濡插牊绻涢崱妤冪婵炲牊锕㈠缁樻媴妞嬪簼瑕嗙紓鍌氱М閸嬫挻绻涚€涙ḿ鐭ら柛鎾跺枛瀹曟椽鍩€椤掍降浜滈柟鐑樺灥閳ь剙缍婂鎶筋敆閸曨剛鍘遍柣搴秵娴滅兘鐓鍌楀亾鐟欏嫭纾婚柛妤€鍟块锝夊磹閻曚焦鞋闂備礁鎼Λ瀵哥不閹捐钃熼柕濞炬櫆閸嬪棝鏌涚仦鍓р槈妞ゅ骏鎷�
核心提示:J2ME应用程序已经我在应用开发过程中,经常用到J2ME的网络应用,关于J2ME网络应用程序的性能探讨,但限于J2ME无线设备的能力,我们不得不在可用性和性能之间作出选择,对应的服务器端口是10000,\n");testThread = new TestThread(getAppProperty("

  J2ME应用程序已经
  我在应用开发过程中,经常用到J2ME的网络应用,但限于J2ME无线设备的能力,我们不得不在可用性和性能之间作出选择,因此,我做了以下的试验,并由此总结出一点结论,以方便后来者不必再走弯路。
  
  我的应用主要功能是测试J2ME设备的网络连接性能,因此,其他方面的测试概不涉及。
  
  我们知道,J2ME的通用连接框架为我们提供了http/socket/数据报/本地文件/线外等连接方式,但由于具体设备实现不同而导致程序开发方面的不便。举例来说,J2ME 的 MIDP 1.0版本中没有规定socket是必须的,但到了MIDP 2.0 socket才成为必须实现的协议。因此,现阶段大多数流行的设备都没有socket连接,这给我们编程带来了不利因素。在我们的测试程序中,SOCKET测试采用了StreamConnection类来建立连接,而走的是socket协议。分析一下程序即可知。
  
  本文涉及了多种协议情况下的数据上传与下载,中文上传下载处理及网络传输计时、数据加密解密等方面的内容。为了做到通用,我在该程序的实现中没有用到特定设备的类。
  
  本文给出的测试数据中第一个是建立连接所使用的时间,其余9项是连接建立后的数据传送时间。最后一项是前面9项数据的平均值。
  
  测试结果数据比较:
  
  机型,所用时间(秒),连接次数
  
  SUN WTK 模拟器
  HTTP  1.391 0.188 0.625 0.141 0.141 0.391 0.313 0.204 0.375 0.484 0.318
  SOCK  0.500 0.531 0.157 0.531 0.360 0.172 0.313 0.641 0.437 0.266 0.378
  
  Nokia6610
  HTTP 4.258 1.682 1.612 1.373 2.681 1.820 1.264 1.512 1.919 1.808 1.741
  SOCK 未通过
  
  Nokia 7650
  HTTP  7.812 2.790 2.641 2.500 2.630 3.922 2.438 2.672 2.219 2.594  2.712
  SOCK  1.719 1.312 1.609 3.359 3.360 1.375 1.781 3.313 1.250 1.329  2.076
  
  Nokia 6600
  HTTP  3.937 1.984 2.172 1.641 1.500 1.531 2.125 1.906 1.843 2.156 1.873
  SOCK  3.188 1.281 1.406 1.266 1.833 1.688 1.719 1.688 1.625 1.703 1.579
  
  索爱P802
  HTTP  7.484 1.484 1.500 1.859 1.485 1.500 1.938 1.781 1.938 1.701 1.687
  SOCK  1.360 1.328 1.281 1.625 1.406 1.592 1.140 1.281 1.312 1.297 1.362
  
  从以上数据分析,我认为:
  1、每一款机器每一种连接方式在同一时刻的网络连接速度波动都较大,即每一次连接都可能有导致网络连接滞后的不确定因素;
  2、无论哪一种连接方式,无线设备的网络连接速度比PC连接要慢;
  3、当前网络连接的时间超过了游戏者可接受的延迟,不适合做实时或即时性操作;
  4、随着中国移动EDGE的上线,或者联通公司的CDMA1X普及,实时性手机应用将会得到发展,但仍需要进一步测试;
  5、在无线应用网络连接术语中有呼叫建立延迟(Call Setup latency)和通话信号传输延迟(Intra-call latency)两种,从以上数据可以看出,第一种延迟要比后一种延迟要明显一些,即第一次连接时用户需要等待更多的时间;
  
  以下是本文的代码片断:
  
  public class Game extends MIDlet implements CommandListener {
    PRivate Display display;
    private Form fmHTTP;
    private Form fmHTTP2;
    private Form fmStream;
    private Form fmSocket;
    private Command cmdTest  = new Command("测试", Command.BACK, 0);
    private Command cmdStream = new Command("STREAM", Command.ITEM, 1);
    private Command cmdSocket = new Command("SOCKET", Command.ITEM, 2);
    private Command cmdHTTP  = new Command("HTTP", Command.ITEM, 3);
    private TestThread testThread;
    public Game() {
      display = Display.getDisplay(this);
  
      fmHTTP = new Form("1.HTTP测试");
      fmHTTP.addCommand(cmdStream);
      fmHTTP.addCommand(cmdSocket);
      fmHTTP.addCommand(cmdHTTP2);
      fmHTTP.addCommand(cmdExit);
      fmHTTP.setCommandListener(this);
      fmHTTP.append("HTTP协议网络测试工具用于检测手机是否具备HTTP网络连接能力。第一行数据是由服务器产生的,经过UTF编码和DES加密传输到手机上的。\n");
  
      fmStream = new Form("3.STREAM测试");
      fmStream.addCommand(cmdHTTP);
      fmStream.addCommand(cmdHTTP2);
      fmStream.addCommand(cmdSocket);
      fmStream.setCommandListener(this);
      fmStream.append("STREAM网络连接是走的socket端口,对应的服务器端口是10000。\n");
      testThread = new TestThread(getAppProperty("Server").toLowerCase().trim());
    }
  
    class TestThread implements Runnable {
      private String server;
      private String message;
      private Form curForm;
      private int responseCode;
      private InputStream is2;
      private HttpConnection conHttp;
  
  
      private String keyOptimize;
      private HttpConnection conOptimize;
  
      public TestThread(String server) {
        this.server = server;
      }
  
      public void start(Form curForm) {
        this.curForm = curForm;
        Thread t = new Thread(this);
        t.start();
      }
  
      public void run() {
        message = "";
        long start,timeused;
        int formid = Integer.parseInt(curForm.getTitle().substring(0,1));
        start = System.currentTimeMillis(); //网络用时测试起点
        if (formid==1) { //1.HTTP测试
          try {
            String key = genPassWord(); //产生8位的随机字符串密码,用于返回给服务器进行DES加密
            conHttp = (HttpConnection) Connector.open("http://" + server + ":8080/ns/hellodes?r=" + key);
            responseCode = conHttp.getResponseCode();
            if (responseCode==HttpConnection.HTTP_OK){
              InputStream is = conHttp.openInputStream();
              int len = (int) conHttp.getLength();
              byte[] bytestr = new byte[len];
              is.read(bytestr); //直接从输入流中读取字节,
              cipher = new DesCipher(key.getBytes());
              for (int i = 0; i < bytestr.length / 8; i++) {
                cipher.decrypt(bytestr, i * 8, bytestr, i * 8); //解密;
              }
              message = gbDecode(new String(bytestr)); //解码
              is.close();
              is = null;
            }else{
              message = "服务器无法连接!" + responseCode;
            }
          } catch (Exception e) {
            message = e.getMessage();
          }
        } else if (formid==3) { //3.STREAM测试
          try {
            conStream = (StreamConnection) Connector.open("socket://"  + server + ":10000", Connector.READ_WRITE);
            InputStream is = conStream.openInputStream();
            byte[] outs = new byte[20];
            int len = 0, ch;
            while ((ch = is.read()) != -1) {
              outs[len] = (byte) ch;
              len++;
            }
            byte[] bytestr = new byte[len];
            System.arraycopy(outs, 0, bytestr, 0, len);
            message = gbDecode(new String(bytestr));
            is.close();
            is = null;
          } catch (Exception e) {
            message = e.getMessage();
          }
        } else if (formid==4) { //SOCKET测试
          /*
          try {
            sck = (SocketConnection)Connector.open("socket://"+server+":10009",Connector.READ_WRITE);
            sck.setSocketOption(SocketConnection.LING

Tags:关于 JME 网络

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接