Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Netty能否用于增强客户机/服务器(Jetty 9中)应用程序通信?_Java_Json_Io_Netty_Nio - Fatal编程技术网

Java Netty能否用于增强客户机/服务器(Jetty 9中)应用程序通信?

Java Netty能否用于增强客户机/服务器(Jetty 9中)应用程序通信?,java,json,io,netty,nio,Java,Json,Io,Netty,Nio,目前,我正在为客户机/服务器应用程序进行性能调优。目前已在9号码头部署。这里,客户机使用HttpURLConnection连接到服务器应用程序中的HttpServlet 客户端发送一个java可序列化对象作为请求,并从HttpServlet接收一个JSON字符串。接收到JSON字符串后,我们将对其进行解析并执行我们想要执行的操作。此响应JSON的重量为4MB-5MB,请求java序列化对象的重量相对较轻 主要问题是通过http下载JSON字符串需要花费大量时间(15-20秒)。我使用Jackso

目前,我正在为客户机/服务器应用程序进行性能调优。目前已在9号码头部署。这里,客户机使用HttpURLConnection连接到服务器应用程序中的HttpServlet

客户端发送一个java可序列化对象作为请求,并从HttpServlet接收一个JSON字符串。接收到JSON字符串后,我们将对其进行解析并执行我们想要执行的操作。此响应JSON的重量为4MB-5MB,请求java序列化对象的重量相对较轻

主要问题是通过http下载JSON字符串需要花费大量时间(15-20秒)。我使用Jackson制作了JSON解析器流,这样它就可以在下载的部分上工作,而无需等待下载完整的JSON。但是,当需要花很多时间下载时,这并不会产生好的效果

我寻找的选择是。 -增加带宽 -尽可能减少JSON大小(我也在努力)

另外,我听说Netty(使用NIO)将是一个很好的解决方案。老实说,我对内蒂是个新手。我听说它是一个NIO客户机-服务器框架,而不是像Jetty那样的HttpServlet容器。它还以出色的表现提升了Twitter等主要应用程序(参考:)。我听说Netty将帮助您处理大量并发连接(例如:16000个线程)。因此,基本上,我怀疑它在多大程度上适合我的情况

任何人都能对这个或任何其他实现有一个想法来提高它吗

代码如下:

Client.java

URL                                         url                         = new URL(http://myhost.com/Connectors/url2Service);
HttpURLConnection                           servletConnection           = (HttpURLConnection) url.openConnection();

servletConnection.setDoInput(true);  
servletConnection.setDoOutput(true);  
servletConnection.setUseCaches (false);  
servletConnection.setDefaultUseCaches (false);  
servletConnection.setRequestMethod("POST");
servletConnection.setRequestProperty("content-type","application/x-java-serialized-object");
servletConnection.setRequestProperty("Accept","application/json");
servletConnection.setRequestProperty("Accept-Encoding","gzip,deflate");
servletConnection.setRequestProperty("user-agent","Mozilla(MSIE)");
servletConnection.setConnectTimeout(30000);
servletConnection.setReadTimeout(60000);
servletConnection.connect();


String                                      encodingHeader              = servletConnection.getHeaderField("Content-Encoding");

String                                      contentType                 = servletConnection.getHeaderField("content-type");


if(contentType.equals("application/json")){

InputStream inputStream = servletConnection.getInputStream();


if(encodingHeader != null && encodingHeader.toLowerCase().indexOf("gzip") != -1){

        gzipis          = new GZIPInputStream(inputStream);

}else{

        iSR             = new InputStreamReader(inputStream);
        br              = new BufferedReader(iSR);

}


ResposeObject   resposeObject                   = new JsonString2ResposeObject().parse(gzipis); // previously we passed complete String here


}
Server-url2Service Servlet

public class url2Service extends HttpServlet{

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

            ObjectInputStream       ois = new ObjectInputStream(request.getInputStream());
            RequestObject requestObject = (RequestObject) ois.readObject();

            response.setContentType("application/json");

            String jsonResponseString = new ServerApplication().doMoreWithRequest(requestObject);

            OutputStreamWriter wr = null;

            if (null != aEncoding && aEncoding.toLowerCase().indexOf("gzip") != -1) {
                gzipos = new GZIPOutputStream(response.getOutputStream());
                wr = new OutputStreamWriter(gzipos);                    
                response.addHeader("Content-Encoding", "gzip,deflate");                 
            } else {
                wr = new OutputStreamWriter(response.getOutputStream());
            }

            wr.write(jsonString);
            wr.flush();



    }

}

你考虑过使用Jetty的NIO吗?它有可能是足够的(从来没有工作,但它)。实际上没有。在论坛上,有人()对此表示怀疑,并为Netty提出了建议。但我也要检查一下。问题是,内蒂是一种完全不同的野兽——如何切换到它并不是那么简单。如果你有相当数量的现有代码,或者你没有太多的空闲时间,那么我建议避免这种迁移,除非真的有必要。。。我明白你的意思了!代码是体面的(或多或少),是的,我也在和时间作斗争。但是对速度的渴望也非常强烈。谢谢用户3707125。