我有一个用ASP.Net WebAPI编写的服务方法:http://diningphilospher.azurewebsites.net/api/dining?i=12
并且JavaScript客户端获取响应并将其可视化here
但餐饮哲学家问题的本质是我永远不知道什么时候会发生死锁或饥饿。因此,我希望通过服务方法和客户端JavaScript流式传输数据,而不是拥有请求/响应,而是读取数据,我假设JSON是异步的。目前有几个帖子指示我在WebAPI中changing the default buffer limit,所以你会得到像流行为一样的行为。
有什么其他(简单或有效)方法可以实现上述行为。
答案 0 :(得分:1)
您可以从ASP.NET Web API返回PushStreamContent,并在客户端使用Server Sent Events(SSE)JavaScript API。查看Henrik blog中的推送内容部分。另请参阅Strathweb。我不确定后一种实现的一件事是使用ConcurrentQueue。 Henrik的实现使用ConcurrentDictionary,并允许您从与删除的客户端相对应的字典中删除StreamWriter对象,在我看来,使用ConcurrentQueue很难实现。
此外,Strathweb实现使用KO。如果您不喜欢使用KO,则不必使用。 SSE JavaScript API与KO无关。
BTW,IE 9或更低版本不支持SSE。
要考虑的另一件事是横向扩展选项。负载平衡会有问题,因为负载可能无法均匀分布,因为客户端与他们首先命中的服务器(或Web角色)绑定。