Articles of Java的

如何通过nginx进行分块的请求

看来nginx不太支持分块的请求。 但是我试图得到一个更明确的(当前的)答案。 我有一个客户端从设置标题Transfer-Encoding: chunked的Java客户端向服务器发出SOAP请求。 当我直接连接到Tomcat上的应用程序时,所有的工作都很好。 但是当我把nginx放在它们之间的时候,事情就会崩溃。 添加一些细节:我正在与CloudFoundry合作。 我正在使用Micro Cloud Foundry来确认事情在没有nginx的情况下按预期工作。 但我的要求是使用cloudfoundry.com,所以我没有能力绕过nginx那里。 这个问题和答案说,这也许是我唯一的解决方法: http : //wiki.nginx.org/NginxHttpChunkinModule 。 但是该解决方法不可用,因为我无法修改cloudfoundry.com上的configuration。 这个问题看起来也很相似,但是它实际上涵盖了这个要求的相反情况。 它涵盖了分块响应而不是分块请求。 那么客户的任何改变如何解决呢? 是否可以发送Transfer-Encoding: chunked和Content-Length: 123作为头文件? 这个区域对我来说是新的,但是从Apache HttpComponents这样的项目看来,可以设置长度或者分块,但不能同时设置。 分块的一点是,请求开始时不需要知道长度。 我可以告诉我的客户端使用HTTP / 1.0,并与nginx玩,而不分块? 还有其他的解决办法,我忘记了吗?

为什么Nginx以相反的顺序提供客户端SSL DN?

我很好奇为什么一些networking服务器(例如Nginx)以相反的顺序提供客户端SSL DN。 Web应用程序将DN发布到正在尝试创buildJava javax.naming.ldap.LdapName的Java Web Service。 标准订单(LDAP或X500Name): "CN=Jimmy Blooptoop,OU=Someplace,OU=Employees,DC=Bloopsoft-Inc" 反序(OpenSSL Oneline格式)(Nginx返回为_ $ ssl_client_s_dn_): "/DC=Bloopsoft-Inc/OU=Employees/OU=Someplace/CN=Jimmy Blooptoop" 为什么是这样? 哪一个匹配LDAP RFC? 他们都是? LDAP RFC注释: 有许多与LDAP相关的RFC: https : //www.ldap.com/ldap-specifications-defined-in-rfcs 许多人提到不同的东西,这里有一个很快的尝试: 1993年7月:RFC 1485 – 可分辨名称的string表示 1995年3月:RFC 1779 – 可分辨名称的string表示 Dec 1997:RFC 2253 – 轻量级目录访问协议(v3):可分辨名称的UTF-8string表示 2002年9月:RFC 3377 – 轻量级目录访问协议(v3):技术规范(更新RFC 2253) 2003年3月:RFC 3494 – 轻量级目录访问协议版本2(LDAPv2)到历史状态(Retiring RFC 1485,RFC 1779) 2006年6月:RFC 4514 – 轻量级目录访问协议(LDAP):可分辨名称的string表示 […]

SSL连接失败,服务器没有证书请求,从运行在Java 6上的本地Websphere AS连接到AWS上的Nginx

我很难通过客户端身份validation连接到服务。 服务(“SecureService”)位于AWS上。 客户端在我的Mac上的Linux VM上。 SecureService上的Nginx对我在端口443上访问的资源执行客户端身份validation。使用概念validationJava独立应用程序(openjdk 1.8.0_60)或其他客户端,可以从同一个VM连接到同一个SecureService (wget,openssl),但不是来自Websphere AS上托pipe的相同Java代码(确实依赖于较旧的库和IBM J9 VM,构build版本2.6,JRE 1.6.0)。 但是,在/ etc / hosts中将SecureService主机名重新映射到127.0.0.1时,Websphere AS上相同的Java代码将成功连接到需要来自同一证书颁发机构的客户端身份validation的本地openSSL服务器。 SecureServer在失败连接中的响应报告“400未发送必需的SSL证书”…“400错误请求”,但tcpdump数据包捕获显示不发送证书请求,而在所有其他情况下。 这是令人费解的,并导致我认为在ClientHello消息中有一些服务器不喜欢的东西,尽pipeClientHello消息在连接成功和失败时非常相似。 一个很奇怪的细节还是,tcpdump从来没有捕获到我的客户端的第一个TCP SYN数据包到失败的通信服务器,而它捕获其余的(SYN + ACK从服务器,然后ACK从客户端)和所有的数据包SYN,SYN + ACK,ACK)。 所有通信都使用TLSv1.2。 连接失败: (客户端< – >服务器) < – SYN,ACK – >确认 – >客户端你好 < – 确认 < – 服务器你好,证书,服务器你好完成 – >确认 – >客户端密钥交换 < – 确认 – >改变Cypher规格 < – 确认 – […]

重复使用tomcat线程,等待“长”的时间

configuration Web服务器:Nginx 应用程序服务器:具有200个请求服务线程的默认configuration的Tomcat 预期的响应时间为我的服务器:<30秒(有很多第三方依赖项) 情景 每10秒钟,应用程序将需要生成令牌供其使用。 令牌生成的预期时间大约是5秒,但是由于它的第三方系统是通过networking联系的,这显然是不一致的,可能会下降到10秒。 在令牌生成过程中,每秒接近80%的传入请求需要等待。 我相信会发生什么 由于等待令牌生成的请求将不得不等待“长”时间,因此在等待令牌生成过程完成的同时,没有理由将这些请求服务重新用于服务其他传入请求。 基本上,如果我的20%继续服务,这是有道理的。 如果等待的线程没有被其他请求使用,tomcat请求服务的限制将被达成,服务器将基本上窒息,这是我不是很兴奋的事情发生。 我试过了什么 最初我希望切换到Tomcat的NIO连接器将完成这项工作。 但看了这个比较后,我真的没有希望了。 不过,我试着强迫这些请求等待10秒钟,但是没有奏效。 现在我正在思考的是,我需要在请求的时候搁置这个请求,并且需要通知tomcat这个线程可以被重用。 同样,当需要向前移动的时候,我需要tomcat给它一个线程池的线程。 但我怎么做,或者即使这是可能的,我也是盲目的。 任何指导或帮助?

我可以在nginx服务器上部署.war吗?

我真的很喜欢nginx的稳定性和处理请求的方式。 而我真的很喜欢tomcat的Java和用户友好 有没有办法在nginx服务器上部署我的.war文件?

从Android应用程序与服务器进行通信时出现各种HTTP错误

更新:2015年1月4日 我仍然有这些问题。 我们的应用程序的用户增加,我看到所有types的networking错误。 我们的应用程序发送电子邮件每次有一个networking相关的应用程序错误。 我们的应用程序进行金融交易 – 所以重新提交并不是真正的幂等 – 所以非常害怕启用HttpClient的重试function。 我们已经在服务器上做了一些响应caching来处理由用户明确完成的重新提交。 但是,仍然没有解决scheme没有不良的用户体验。 原来的问题 我有一个Android应用程序发布数据作为用户操作的一部分。 数据包括几个图像,我把它们作为Protobuf消息(字节数组,有效)打包并通过HTTPS连接发送到服务器。 虽然该应用大部分工作正常,但偶尔会看到连接错误。 这个问题现在已经变得更加明显,我们有一些用户在相对较慢的networking区域(2G连接)。 但是,这个问题并不仅限于连接速度慢的地方,客户在使用WiFi和3G连接时会遇到问题。 我们在App日志中注意到了一些例外情况 下面的一个5分钟后发生,因为我已经将套接字超时设置为5分钟。 这个应用程序试图发布145kb的数据 堆栈跟踪java.net.SocketTimeoutException:读取超时在org.apache.harmony.xnet.provider.jsse.NativeCrypto.SSL_read(本地方法)在org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl $ SSLInputStream.read( OpenSSLSocketImpl.java:662)org.apache.http.impl.io.AbstractSessionInputBuffer.fillBuffer(AbstractSessionInputBuffer.java:103)at org.apache.http.impl.io.AbstractSessionInputBuffer.readLine(AbstractSessionInputBuffer.java:191) 下面一个发生了2.5分钟(套接字超时设置为5分钟),客户端正在发送144kb的数据 javax.net.ssl.SSLException:写入错误:ssl = 0x5e4f4640:系统调用期间发生I / O错误,在org.apache的org.apache.harmony.xnet.provider.jsse.NativeCrypto.SSL_write(Native Method)中断开pipe道。 (org.apache.http.impl.io.AbstractSessionOutputBuffer.write(AbstractSessionOutputBuffer.java:109))。 io.ContentLengthOutputStream.write(ContentLengthOutputStream.java:113) 1分钟后发生下面的一个。 堆栈跟踪javax.net.ssl.SSLException:由org.apache.harmony.xnet.provider.jsse.NativeCrypto.SSL_do_handshake(org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.startHandshake (OpenSSLSocketImpl.java:378)at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.getInputStream(OpenSSLSocketImpl。org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl $ SSLInputStream。(OpenSSLSocketImpl.java:634)at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.getInputStream(OpenSSLSocketImpl。 Java的:605) 77秒后发生下面的一个 堆栈跟踪javax.net.ssl.SSLException:SSL握手中止:ssl = 0x5e2baf00:系统调用期间的I / O错误,由org.apache.harmony.xnet.provider.jsse.NativeCrypto.SSL_do_handshake(Native方法) org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:378)at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl $ SSLInputStream。(OpenSSLSocketImpl.java:634)at org。 apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.getInputStream(OpenSSLSocketImpl.java:605)at org.apache.http.impl.io.SocketInputBuffer。(SocketInputBuffer.java:70) […]

如何在bash中dynamic设置java内存大小?

#!/bin/bash # module add apps/java/1.6 java -Xmx1024m HelloWorld 我需要设置-XmxYm ,其中Y应该是Mb中系统可用内存的95%。

开始在Linux上使用Java进行实时事件调度?

我正在开发一个项目,该项目将使用Java在Linux系统上logging实时事件的数据。 我把所有的HTML抓取的东西都放下了,这很好,我需要弄清楚的是任务的调度和pipe理。 每周可能会有多达四十个事件发生,时间不一,事件可能持续三个小时。 我可以随意创build和更新这些事件的日历,我的问题是如何: 安排一个stream程,在正确的时间刮取每个事件,并在有变更时更新计划。 确保一旦刮开过程已经开始,它在事件的整个(不确定的)持续时间内保持运行。 任何人都可以build议如何最好地处理这个? 我不知道我需要从哪里开始。 谢谢!

Java不能在Ubuntu 11.10上使用NetBeans IDE 7

我在ubuntu 11.10上使用Netbeans IDE 7.1.1,当我尝试使用File-> New Project-> JAVA Project-> JAVA Application创buildJAVA项目时,显示以下错误: 缺less运行某些NetBeans模块所需的JDK。 请使用–jdkhome命令行选项来指定JDK安装,或者参阅http://wiki.netbeans.org/FaqRunningOnJre了解更多信息。 所以我用了下面的命令 sudo update-alternatives –config java 结果是: Selection Path Priority Status ———————————————————— 0 /usr/lib/jvm/java-6-openjdk/jre/bin/java 1061 auto mode 1 /usr/lib/jvm/java-6-openjdk/jre/bin/java 1061 manual mode * 2 /usr/lib/jvm/java-7-openjdk-i386/jre/bin/java 1051 manual mode 我试图通过使用以下命令运行terminal: netbeans –jdkhome /usr/lib/jvm/java-7-openjdk-i386/jre/bin/java 但我得到错误: Cannot find java. Please use the –jdkhome switch. netbeans也不能启动。 我尝试了使用通过这个命令find的每条path的这个命令: whereis […]

Java linux / unix命令

我有一个自定义的java可执行jar file – mytestapp.jar ,执行一些基本的检查,如系统名称,IP地址,规范名称,正常运行时间等,并在屏幕上自定义共振峰打印相同。 该程序工作正常,我得到所需的和预期出来,当我运行 java -jar /mytestapp/mytestapp.jar 而不是每次运行上述命令,我已经创build了一个文件myappinfo并在文件中添加上述命令并保存它。 将/mytestapp添加到PATHvariables中。 当我做echo $PATH ,它显示echo $PATH /mytestapp 。 我将myappinfo的文件权限设置为755并使其可执行。 现在,当我从任何文件夹运行命令myappinfo我得到相同的输出。 现在的要求是,我想使这个文件 – myappinfo成为一个二进制文件,不会被任何人使用任何编辑器程序(如vi,nano等)进行更改或检查。 任何build议做到这一点?