- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个使用 Ajax Comet 长轮询的 C# ASP.Net(非 MVC)项目。网页对由实现 IHttpAsyncHandler 的类处理的端点进行 HTTP 调用。
如果(n秒内)没有什么可以向网页报告,则发送一个空的HTTP响应,网页重新调用。如果有东西要发送,则发送更新,网页处理并重新调用。这是非常标准的推送技术,而且效果很好。
现在我正在尝试使用 WebAPI2、非 MVC 添加 API 端点。我有基于 ApiController 类的同步 Controller 。
我想为 API 调用设置推送技术,这样 API 用户就不必轮询更新。
与上面的方法类似,接收API端点调用,并存储上下文。如果超时到期,调用将返回空值,并且调用者应再次调用。如果在超时时间内有数据更新,则将数据返回给调用方,然后调用方需要再次调用并等待更多更新。
问题是好像没有ApiController的异步版本。目的是释放正在处理 API 调用的线程,将其返回到池中,然后当有可用数据或超时到期时,使用工作线程返回响应。
我如何设置 ApiController 以便释放处理调用的线程、存储调用上下文以及我可以在稍后的某个时间点发送对调用的响应?
最佳答案
您可以使用 async/await 来实现您想要的,即:
[HttpPost]
public async Task<HttpResponseMessage> LongRunningOperation([FromBody]Input obj)
{
// Do what ever you need with input data
await WaitForEvent();
// Do what ever you need to return a response
return someResponse;
}
在此示例中,Web API 方法被声明为 async
并且在其主体中 await
运算符用于将线程返回到池中。
我假设您使用某种事件来实现 Comet。据我所知,很多年前我使用 ManualResetEvent
来执行此操作。但是,它可以是任何其他内容。
重要的是 WaitForEvent
方法应该返回一些可等待的东西。换句话说,ManualResetEvent
或其他等待句柄应该包含在任务中。你可以用 AsyncFactory.FromWaitHandle 做到这一点方法。
这篇discussion也值得一读关于 Web API 上下文中的 asyn/await。
关于c# - 如何通过 WebAPI2 执行 C# Ajax Comet?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41016441/
我想测试它可以支持多少个连接。 我正在使用轨道,特别是流媒体,而不是长轮询。 最佳答案 Webload是你正在寻找的东西。 关于comet - 如何对 Comet 服务器进行压力测试?,我们在Stac
我看到 Akka 模块的描述说 Play有很好的 Comet 支持,但我从未使用过 Comet之前,我在 Play 的文档中找不到任何提及。它在 Play 中是如何工作的? 我花了两天多的时间来解决这
我尝试设置 comet ( https://www.comet.ml ) 来跟踪我的 Tensorflow 实验,在创建实验并记录数据集后,我在报告中无法获得准确性。 我的代码: mnist = ge
我正在尝试设置 https://www.comet.ml记录我的实验细节 出现奇怪的错误: Traceback (most recent call last): File "train.py",
我正在运行来自 Comet github project 的 keras 示例. 我添加导入并创建一个新实验: def train(x_train,y_train,x_test,y_test): mo
在 Comet/Reverse Ajax/PubSub 底层技术/基础是 Long polling。所以连接保持打开一分钟左右.. 根据我对网络和操作系统的了解,TCP/IP 仅支持 65535 个端
您与 Websync 合作的体验如何? ( cometd 框架)?在使用它之前,您是否考虑过任何替代方案? 到目前为止我可以说 优点: 非常简单易用 不需要任何服务器配置 缺点: 昂贵(结果为我们节省
我正在考虑编写一个需要能够将消息推送到浏览器的实时网络应用程序。当我第一次阅读 Comet 时,由于浏览器支持薄弱,人们似乎认为它是一种脆弱且不成熟的方法。今天,它似乎是一种既定又实用的技术。但据我所
我需要一些 linux 大师的帮助。我正在开发一个包含 cometd 服务器的网络应用程序。 Comet 服务器在 localhost:8080 上运行,并公开 url localhost:8080/
我读过一些关于这个主题的帖子,答案是 comet、反向 ajax、http 流、服务器推送等。 How does incoming mail notification on Gmail works?
我正在使用 JSONP 进行长轮询,firefox 不断弹出“正在加载”微调器,使页面看起来好像还没有完成加载。有没有办法抑制这种情况? 有人告诉我,Orbited 团队有一些技巧可以抑制这种情况,但
我有一个用 Twisted 编写的简单 cometd 服务器。它打印出时间戳。我还有一个小型静态网络服务器在同一端口上运行。所服务页面上的 JavaScript 尝试通过附加来自 Comet 服务器的
我断断续续地学习 Scala 一段时间,并成功地建立并运行了一个简单的实时发布系统。 我想知道是否有人可以帮助我在正确的方向上通过 JSON 将数据更改推送到我正在运行的几个 javascript 模
我正在尝试为 Comet 设计一个实用的客户端 (JavaScript) 实现。 http://en.wikipedia.org/wiki/Comet_(programming) ) 谈论理论,但我很
我听说我可以使用 Comet作为服务器推送技术与我的 Ajax 代码一起提高我的 Web 应用程序的性能。 这项 cometd 技术有多成熟? 是否所有网络服务器、编程语言和浏览器都支持它? 使用 C
对于一个社交网站,我们使用基于 node.js 的 Comet 服务器作为即时通讯工具,一切都运行良好,我们只有一个问题如何解决澳大利亚和新西兰的延迟问题,我们的 RRT 在 310 毫秒到 440
我一辈子都弄不明白像 Cometd 或 simple-comet 这样的应用程序的目的是什么,而不是像使用 php 的简单长轮询请求和使用这样的代码的无限循环 $time = time(); whil
这更多是出于好奇和“供将来引用”,但 Comet 是如何在数据库端实现的?我知道大多数实现使用长生命周期 HTTP 请求来“等待”直到数据可用,但这是如何在服务器端完成的? Web 服务器如何知道新数
我一直想知道使用 COMET/推送技术是否比使用长请求的更简单的轮询有真正的优势,在轮询中服务器将等待特定的最长时间以等待新事件发生,然后再告诉客户端什么都没有发生. 这两种技术都有相似的客户端延迟,
我想编写一个实时聊天应用程序,需要决定使用哪些技术。 这些技术之间有什么区别,您更喜欢哪一种,为什么? WebSockets 不是一种选择,因为它还没有准备好在野外战斗 谢谢 最佳答案 您应该阅读问题
我是一名优秀的程序员,十分优秀!