Java Netty能否用于增强客户机/服务器(Jetty 9中)应用程序通信?
目前,我正在为客户机/服务器应用程序进行性能调优。目前已在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.javaJava 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
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。