能否通过HTTP从客户端到服务器流式传输数据?

5
我想要从客户端(桌面或移动设备)向托管服务器流数据。这不是大量的数据,每1/10秒1个字节,但是数据需要立即流式传输(无缓冲),并且连接需要长时间保持活动状态(最多10分钟)。
由于服务器是托管的,我没有使用套接字的能力,只能使用http。
我知道在服务器端,如果我连接到客户端,我可以使用持久连接,并且只需写入响应流即可完成此操作。
但是是否有一种方法可以反向执行此操作,其中客户端与服务器具有持久性连接并正在写入请求流?
澄清: 我不必将此客户端->服务器通信作为持久性http连接完成,我只是想知道是否可能,这样我就可以与计划中的服务器->客户端持久性http连接具有对称性。
从我听到的内容来看,似乎我只需进行单独的http post即可实现相同或类似的延迟。
4个回答

1

也许WebSocket会很有用。它允许您在HTTP上创建一个“套接字”,因此您可以使用它在HTTP上从客户端向服务器发送数据。


1

我将提供自己问题的答案,似乎是:

从客户端到服务器进行持久的http连接在技术上是可能的,但由于使用创建单个http请求的常规方法似乎足够快,因此还没有人实现它。

所以我最终采用了这种方法,简单地使用WebRequest.Create和HttpWebRequest类,并相信框架正在处理KeepAlive。 在我的原型中,这似乎足够快,尽管真实世界的性能还有待观察。


在现实世界中速度够快吗? - Felix
@nissemand 我已经进行了非正式的跨国测试(美国),响应时间似乎非常快(可能低于250毫秒)- 这是客户端->服务器->另一个客户端。 - PhilChuang
太棒了,你认为这对于更大量的数据会起作用吗?比如视频? - Felix

0
据我所知,当WCF托管在IIS中时,流式传输不起作用。
我找到了这篇CodeProject文章,它说在WCF 4.5中已经修复了这个问题。
你能让客户端每1/10秒发起新的调用吗?如果你正在使用HTTP 1.1,TCP连接应该保持打开状态。

0

我不确定这是否是一个好的使用案例,但SignalR可能适合你。


1
我与SignalR的Damian Edwards交谈,看起来SignalR只能实现服务器到客户端的持久连接。 - PhilChuang
是的,我不确定它是否完全匹配。 - mgnoonan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接