簡體   English   中英

java,如何在小程序內部使用HttpURLConnection性能增加方法

[英]java, how to increase method using HttpURLConnection performance inside an applet

我不是java專家。

我有一個代碼,用於請求本地Web服務器的響應。 我已經在Java應用程序/ jar中完成了。 至少在我的機器上 ,這非常有效:)在來自本地服務器的回復中出現0錯誤。

但是我的客戶在Applet中使用了我的代碼 :在Java Tomcat上重新編譯,簽名並部署。

並且從客戶端每10個呼叫就有1個錯誤。

有什么建議可以提高Applet內部的性能嗎?

/*
   "ruta" opcion a pedirle al servidor python para que ejecute.
   jTextArea_respuesta: El Objeto Swing de la ventana donde escribir la respuesta
   enDebug:  muestra informes en consola de java, true o false.
 */
public boolean enviaPeticion(javax.swing.JTextArea Jtextarea_respuesta, boolean enDebug, String mi_opcion) {

    long startTime=0;
    long endTime=0;

    if(enDebug==true)
    {
        startTime = System.currentTimeMillis();
    }

    boolean todo_funciono = false;

    //la direccion local del servidor python
    String url = "http://localhost:8080/?opcion=" + mi_opcion;

    //codigo de respuesta http
    int responseCode = 0;

    URL obj;
    try {

        //crea objeto de url            
        obj = new URL(url);

        HttpURLConnection con;
        try {

            //abre conexion                
            con = (HttpURLConnection) obj.openConnection();

            // solo interesa el metodo GET
            con.setRequestMethod("GET");

            //no es necesario indicar el agente
            //con.setRequestProperty("User-Agent", USER_AGENT);
            responseCode = -1;

            try {

                //se obtiene el código de respuesta http
                responseCode = con.getResponseCode();

            } catch (java.net.ConnectException ex) {

                if (enDebug) {
                    Logger.getLogger(Frame.class.getName()).log(Level.WARNING, null, ex);
                }

                //si esto falla lo más problable es que no este activo el programa servidor
                if (Jtextarea_respuesta != null) {
                    Jtextarea_respuesta.setText("servidor caido");
                }

                return false;
            }

            //se procesa la respuesta del servidor web
            BufferedReader in = null;
            try {
                in = new BufferedReader(
                        new InputStreamReader(con.getInputStream()));
            } catch (IOException ex) {
                if (enDebug) {
                    Logger.getLogger(Frame.class.getName()).log(Level.WARNING, null, ex);
                }

                return false;
            }

            String inputLine;
            StringBuffer response = new StringBuffer();

            while ((inputLine = in.readLine()) != null) {
                response.append(inputLine);
            }

            in.close();

            // System.out.println(response.toString());   
            //System.out.println("Response Code : " + responseCode);  
            // si el código de respuesta del servidor es 200
            // es porque el servidor esta activo y la opción ingresada es válida
            if (responseCode == 200) {

                //se procesara un par opcion-valor con los datos xml recibidos
                HashMap<String, String> values = new HashMap<String, String>();
                String xmlString = response.toString();
                Document xml = convertStringToDocument(xmlString);
                Node user = xml.getFirstChild();
                NodeList childs = user.getChildNodes();
                Node child;
                for (int i = 0; i < childs.getLength(); i++) {
                    child = childs.item(i);
                    //System.out.println(child.getNodeName()+"  "+child.getTextContent());

                    //obtiene un par llave-valor
                    values.put(child.getNodeName(), child.getTextContent());
                }

                        if(enDebug==true)
                        {
                            endTime = System.currentTimeMillis();
                        }


                if (mi_opcion.equals("entrada")) {
                    //System.out.println(values.get("positivo"));

                    // esta es la respuesta positiva esperada
                    try {
                        if (values.get("positivo").equals("True")) {
                            //    
                            // **** fue procesada la entrada en el hardware
                            //     
                            if (Jtextarea_respuesta != null) {

                                String duracion="";


                            if(enDebug==true)
                            {
                                // calcula cuanto se tardó en responder el servidor python 
                                duracion = "\n"+"peticion tardó "+ Long.toString(endTime - startTime) + " milisegundos";
                            }

                                Jtextarea_respuesta.setText("enviada entrada "+ duracion);
                            }

                            //podemos reportar que funciono la operacion
                            todo_funciono = true;
                        }
                    } catch (Exception e) {
                        if (enDebug) {
                            //la respuesta xml no contiene <positivo>
                            Logger.getLogger(Frame.class.getName()).log(Level.FINE, null, e);
                        }
                    }

                    try {

                        // en esta situacion hay un error como el dispositivo desconectado
                        String error = values.get("error");

                        if (!error.isEmpty()) {
                            //    
                            // **** ocurrio algun error al solicitar la entrada
                            //  
                            if (Jtextarea_respuesta != null) {
                                Jtextarea_respuesta.setText(error);
                            }

                            return false;
                        }
                    } catch (Exception e) {
                        if (enDebug) {
                            // la respuesta xml no contiene <error>
                            Logger.getLogger(Frame.class.getName()).log(Level.FINE, null, e);
                        }

                    }
                }

            } else {
                if (Jtextarea_respuesta != null) {

                    // alguna otra situación por la cual falle el proceso
                    //  mi_opcion no es válida
                    Jtextarea_respuesta.setText("opcion invalida o error interno");
                    return false;
                }
            }

        } catch (IOException ex) {

            //no se pudo abrir la conexion por permisos de Java o el applet.
            if (enDebug) {
                Logger.getLogger(Frame.class.getName()).log(Level.SEVERE, null, ex);
            }

        }

    } catch (MalformedURLException ex) {

        // en caso que la url haya sido mal escrita.
        // caso improblable.
        if (enDebug) {
            Logger.getLogger(Frame.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    //Jtextarea_respuesta.setText("Enviando peticion a " + url);
    return todo_funciono;

}

您可以通過刪除StringBuilder並直接從連接的輸入流中解析XML來提高性能 這將節省時間和空間。

您無法通過客戶端中的代碼更改來減少服務器故障的發生。

您應該為此使用XPath。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM