javascript - 如何将数据从 WebAPI 方法流式传输到 JavaScript 客户端

标签 javascript json asp.net-web-api streaming

我有一个用 ASP.Net WebAPI 编写的服务方法:http://diningphilospher.azurewebsites.net/api/dining?i=12

JavaScript 客户端获取响应并将其可视化 here

但是哲学家就餐问题的本质是我永远不知道什么时候会发生死锁或饥饿。因此,我不想通过请求/响应来流式传输数据,而客户端 JavaScript 会异步读取我假设的 JSON 数据。目前有几篇文章将我引向changing the default buffer limit在 WebAPI 中,这样你就可以获得类似流的行为。

还有哪些其他(简单或有效)方法可以实现上述行为。

最佳答案

您可以从 ASP.NET Web API 返回 PushStreamContent 并在客户端使用服务器发送事件 (SSE) JavaScript API。查看 Henrik 的 blog 中的推送内容部分。另请参阅Strathweb 。对于后一种实现,我不确定的一件事是 ConcurrentQueue 的使用。 Henrik 的实现使用 ConcurrentDictionary,它允许您从与退出的客户端对应的字典中删除 StreamWriter 对象,在我看来,使用 ConcurrentQueue 很难实现。

此外,Strathweb 实现使用 KO。如果你不喜欢用KO,那就不用了。 SSE JavaScript API 与 KO 无关。

顺便说一句,IE 9 或更低版本不支持 SSE。

另一件事要考虑的是横向扩展选项。负载平衡将会出现问题,从某种意义上说,负载可能不会均匀分布,因为客户端绑定(bind)到它们首先访问的服务器(或 Web Angular 色)。

关于javascript - 如何将数据从 WebAPI 方法流式传输到 JavaScript 客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16574883/

相关文章:

javascript - 如何检查两个不同类别的所有复选框

javascript - AngularJS ng-bind-html 不适用于表达式

json - 在 Perl 中,如何查询 JSON::Path 对象并返回匹配元素的路径?

c# - 向 HTTPresponseMessage Web API C# 添加换行符

c# - Web API 操作过滤器 - Controller.TempData 等效?

javascript - 子访问父隔离范围: cell content access cell scope

javascript - 导入后导出的模块未定义

c# - .NET WebApi 中的服务器传输/重定向

php - 如何使事件永久保留在全日历中

java - Spring 启动 : Is it possible to consume @RequestParam's as json?