Server-Sent Events with Play:仅在进程终止时收到响应

Server-Sent Events with Play: response only received when process killed

我正在尝试将示例 Web 应用程序 play-streaming-scala 转换为 运行,但在某些情况下我会遇到奇怪的行为。

我直接在某个主机的端口 80 上安装了应用程序 运行ning,我正在使用 curl -iv --raw http://somehost/scala/eventSource/liveClock.

检查输出

我期待的是这样的:

* Hostname was NOT found in DNS cache
*   Trying 195.176.3.71...
* Connected to somehost (0.0.0.0) port 80 (#0)
> GET /scala/eventSource/liveClock HTTP/1.1
> User-Agent: curl/7.39.0
> Host: somehost
> Accept: */*
> 
< HTTP/1.1 200 OK
HTTP/1.1 200 OK
< Transfer-Encoding: chunked
Transfer-Encoding: chunked
< Content-Type: text/event-stream; charset=utf-8
Content-Type: text/event-stream; charset=utf-8
< Date: Wed, 18 Jan 2017 13:24:55 GMT
Date: Wed, 18 Jan 2017 13:24:55 GMT

< 
10
data: 14 24 56


10
data: 14 24 56


10
data: 14 24 56

等等,随着时间的流逝,可以清楚的看到一个接一个的区块

现在,这在某些机器上运行良好。在校园里的其他一些人身上,这失败了。 curl 只显示这个然后停止:

*   Trying 195.176.3.71...
* Connected to somehost (0.0.0.0) port 80 (#0)
> GET /scala/eventSource/liveClock HTTP/1.1
> Host: somehost
> User-Agent: curl/7.43.0
> Accept: */*
> 

现在有趣的是:如果我杀死主机上的 webapp,curl 突然“赶上”并将所有块吐到一起,像这样关闭连接:

10
data: 14 35 20


* transfer closed with outstanding read data remaining
* Closing connection 0
curl: (18) transfer closed with outstanding read data remaining

什么可能导致该行为?到底发生了什么并拦截这些事件?有什么方法可以从播放响应中“强制刷新”某些内容吗?

原来由 OS X 的家长控制系统自动设置的本地“隐藏”代理没有正确转发分块响应,从而使基于 Server-Sent 事件的系统无法运行。可惜了。