Akka Streams' ActorPublisher作为Web响应的来源 - 背压如何工作

时间:2017-06-13 20:39:10

标签: scala akka akka-http akka-stream backpressure

我使用 akka-streams ' ActorPublisher actor作为发送到传入WebSocket或HTTP连接的每个连接Source的数据流传输。

ActorPublisher contract是通过提供需求定期请求数据 - 下游可以接受的元素数量。如果需求为0,我不应该发送更多元素。我观察到,如果我缓冲元素,当消费者缓慢时,缓冲区大小在1到60之间波动,但大多在40-50附近。

要流式传输我使用 akka-http 将WebSocket输出和HttpResponse数据设置为Source Message的能力(或ByteString S)。

我想知道在这种情况下背压是如何工作的 - 当我通过网络将数据流传输到客户端时。这些数字究竟是如何计算的?它会检查网络级别发生了什么吗?

1 个答案:

答案 0 :(得分:2)

我能为你的问题找到最接近的问题"在这种情况下背压如何工作"来自the documentation

  

Akka HTTP一直在流式传输,这意味着   Akka Streams启用的背压机制可以通过   所有层 - 从TCP层到HTTP服务器,一直到最后   面向用户的HttpRequest和HttpResponse以及他们的HttpEntity   的API。

关于"如何计算这些数字",我认为这是specified in the configuration settings