直接使用Java NIO和Netty的Heroku H15错误

直接使用Java NIO和Netty的Heroku H15错误,java,heroku,netty,nio,Java,Heroku,Netty,Nio,这对于我们使用backedby是一个问题,backedby直接使用javanio。我们认为我们面对的是Netty修复的问题,所以我们将Netty的修复应用于vlingo wire。这不管用。我们最终放弃了使用直接NIO甚至合并Netty的补丁来解决这个问题。因此,我们转而使用Netty代替NIO,NIO在其他地方都有效,但在Heroku上不起作用 通过使用Netty和一些细粒度日志记录,我们发现对于每个请求,服务器都会做出明确的响应。但由于某些原因,回复没有通过Heroku路由器。例如: 202

这对于我们使用backedby是一个问题,backedby直接使用javanio。我们认为我们面对的是Netty修复的问题,所以我们将Netty的修复应用于
vlingo wire
。这不管用。我们最终放弃了使用直接NIO甚至合并Netty的补丁来解决这个问题。因此,我们转而使用Netty代替NIO,NIO在其他地方都有效,但在Heroku上不起作用

通过使用Netty和一些细粒度日志记录,我们发现对于每个请求,服务器都会做出明确的响应。但由于某些原因,回复没有通过Heroku路由器。例如:

2020-04-06T20:50:13.896574+00:00 app[web.1]: 20:50:13.896 [nioEventLoopGroup-3-4] DEBUG i.v.w.f.b.n.s.NettyInboundHandler - Request received
2020-04-06T20:50:13.896929+00:00 app[web.1]: 20:50:13.896 [nioEventLoopGroup-3-4] DEBUG i.n.handler.logging.LoggingHandler - [id: 0x1efddaa2, L:/172.18.27.14:59829 - R:/10.11.43.12:20716] READ COMPLETE
2020-04-06T20:50:13.897026+00:00 app[web.1]: Retrieving operations and...
2020-04-06T20:50:13.898394+00:00 app[web.1]: 20:50:13.898 [nioEventLoopGroup-3-4] DEBUG i.n.handler.logging.LoggingHandler - [id: 0x1efddaa2, L:/172.18.27.14:59829 - R:/10.11.43.12:20716] WRITE: 148B
2020-04-06T20:50:13.898395+00:00 app[web.1]: +-------------------------------------------------+
2020-04-06T20:50:13.898396+00:00 app[web.1]: |  0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f |
2020-04-06T20:50:13.898397+00:00 app[web.1]: +--------+-------------------------------------------------+----------------+
2020-04-06T20:50:13.898397+00:00 app[web.1]: |00000000| 48 54 54 50 2f 31 2e 31 20 32 30 30 20 4f 4b 0a |HTTP/1.1 200 OK.|
2020-04-06T20:50:13.898397+00:00 app[web.1]: |00000010| 43 6f 6e 74 65 6e 74 2d 54 79 70 65 3a 20 61 70 |Content-Type: ap|
2020-04-06T20:50:13.898399+00:00 app[web.1]: |00000020| 70 6c 69 63 61 74 69 6f 6e 2f 76 6e 64 2e 63 61 |plication/vnd.ca|
2020-04-06T20:50:13.898400+00:00 app[web.1]: |00000030| 6c 63 75 6c 61 74 69 6f 6e 2b 6a 73 6f 6e 3b 76 |lculation+json;v|
2020-04-06T20:50:13.898400+00:00 app[web.1]: |00000040| 65 72 73 69 6f 6e 3d 31 2e 31 0a 43 6f 6e 74 65 |ersion=1.1.Conte|
2020-04-06T20:50:13.898400+00:00 app[web.1]: |00000050| 6e 74 2d 4c 65 6e 67 74 68 3a 20 35 33 0a 0a 5b |nt-Length: 53..[|
2020-04-06T20:50:13.898401+00:00 app[web.1]: |00000060| 0a 20 20 22 41 44 44 49 54 49 4f 4e 22 2c 0a 20 |.  "ADDITION",. |
2020-04-06T20:50:13.898401+00:00 app[web.1]: |00000070| 20 22 53 55 42 54 52 41 43 54 49 4f 4e 22 2c 0a | "SUBTRACTION",.|
2020-04-06T20:50:13.898401+00:00 app[web.1]: |00000080| 20 20 22 4d 55 4c 54 49 50 4c 49 43 41 54 49 4f |  "MULTIPLICATIO|
2020-04-06T20:50:13.898402+00:00 app[web.1]: |00000090| 4e 22 0a 5d                                     |N".]            |
2020-04-06T20:50:13.898402+00:00 app[web.1]: +--------+-------------------------------------------------+----------------+
2020-04-06T20:50:13.898467+00:00 app[web.1]: 20:50:13.898 [nioEventLoopGroup-3-4] DEBUG i.n.handler.logging.LoggingHandler - [id: 0x1efddaa2, L:/172.18.27.14:59829 - R:/10.11.43.12:20716] FLUSH
2020-04-06T20:50:13.898847+00:00 app[web.1]: 20:50:13.898 [nioEventLoopGroup-3-4] TRACE i.v.w.f.b.n.s.NettyInboundHandler - Reply sent
结论是,可能我们没有正确地关闭客户端套接字(即使使用
curl
也有同样的问题)。在任何情况下,我们都尝试在响应HTTP请求后立即关闭服务器套接字。假设关闭可能会刷新套接字缓冲区(小响应)。这对我们也不起作用

所有这些从一开始就在直接使用AWS上起作用,并继续在那里发挥作用

我们目前正在研究一些关于超时和DNS配置的想法,但到目前为止还没有定论


在这一点上,我们陷入困境,不知道下一步该做什么或尝试什么。我们当然愿意支持Heroku。如果您有任何线索可以分享,我们将不胜感激。

嘿,我在Heroku工作。有没有办法重现这一点?某个在Heroku上引发问题的示例项目?如果可能的话,我想对此进行更深入的研究。谢谢@Malax,您可以看到以下回购协议中使用的示例,以及自述文件中的步骤。以下是更多步骤:一旦Procfile已经存在,您需要做的就是将其部署到Heroku上,并在[app name].herokuapp.com/calculations/operations上执行一个简单的GET请求。应用程序成功处理,但是,请求将挂起,直到发生H15错误。您好@Malax上面的代码和步骤有帮助吗?嘿,我在为Heroku工作。有没有办法重现这一点?某个在Heroku上引发问题的示例项目?如果可能的话,我想对此进行更深入的研究。谢谢@Malax,您可以看到以下回购协议中使用的示例,以及自述文件中的步骤。以下是更多步骤:一旦Procfile已经存在,您需要做的就是将其部署到Heroku上,并在[app name].herokuapp.com/calculations/operations上执行一个简单的GET请求。应用程序成功处理,但是,请求将挂起,直到发生H15错误。Hi@Malax上面的代码和步骤有帮助吗?