2

So, we may be streaming tons of data from an http server through an http server to a client. So http chunking + tcp flow control comes to mind. Normally to be a man in the middle like this, our man in the middle would read from a downstream asynch socket and try to write upstream and if the write was async, we would need a callback. We would NOT read from the downstream socket again until the write callback is called which would cause tcp flow control to automatically take affect once the nic buffer fills up(at least I have seen this occur before correctly).

So I think I have two questions really

  1. Does any version playframework have a write callback so we know when the write has officially been sent through such that we can continue processing again.
  2. Does anyone know of a java http client that calls a hasData and I have to invoke a read next chunk until I stop which calls the typical hasHeaded(Headers h), hasStatus(HttpStatus), hasChunk(HttpChunk chunk)

Well #2 would be ideal but anything close would be nice.

Also, if I am wrong on any points, feel free to correct me.

thanks, Dean

4

1 回答 1

1

我应该添加更多信息,如果我记得,我会更新(当我通过电子邮件收到通知时,你可以通过发表评论来提醒我)。

我们调查了它,这不是太多的工作。netty 中有一个 http 类,我们必须复制和修改 play 以添加我们修改的类,我们必须修改 play 以具有 writeChunk(chunk, callback) 以便回调将在写入时提供给 netty 调用已经完成。

在下游,我们移植了 channelmanager(我在 pre-netty 和 pre-mina 中编写了一些东西,没有管道和所有复杂性,但看起来就像 java 的 Sockets,只是你注册了监听器来收听数据)。这个新的通道管理器只是不断地为您提供具有 ByteBuffer 的 DataChunk,直到您调用 Datachunk.setProcessed,我们实际上停止从该套接字读取,从而允许启动 tcp 流控制。

我们计划利用 netty 的解析器。尽管 netty、grizzly 和 mina 都犯了将解析器与框架绑定得太紧的错误 :( :(....当它认为解析器不将其绑定到框架时的第一件事......哦,好吧。也就是说,所有 3 人都为我如何利用他们的解析器提供了一些很好的建议,所以我不必重写那部分....正确地执行 tcp 流已经是一个巨大的痛苦,并且花了我 2 天的时间来测试中断/固定在频道管理器上。

一旦这一切都在发挥作用并连接到 async-http-client 下可以有不同的 nio 库,然后我可以轻松地接受一大块数据,当我最终 writeChunk(newChunk, callback) 时,我可以传入一个回调调用 DataChunk.setProcessed 以允许下游再次继续。如果您聚合流,或者如果您只是想在一个非常讨厌的客户面前保持稳健,该客户向您发送一些东西但让他的 nic 填满,这将非常有用。

事实上,这可能是对网络服务器的一种新型攻击,它在许多网络服务器上都有效,但它根本不会影响我们的服务器;)。您可以编写一个客户端来写入,然后不从套接字读取,让 nic 填满并继续写入服务器……最终,随着 tcp 流控制启动,许多服务器将挂起写出……我应该有一天在tomcat和旧的playframework等上尝试一下。

于 2012-12-20T03:46:08.740 回答