作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个架构涉及浏览器每 3 秒通过 ajax 轮询一次更新,我想将其更改为 long-polling .
我希望有 1、2.. {n} 个客户端进行长轮询,等待更新,并在服务器上发生一些事情以通知等待的客户端返回。我的第一个想法是使用 EventWaitHandle
,如果我只想支持 1 个客户端,我可以轻松做到这一点。我只要一个 AutoResetEvent
WaitHandle
WaitOne
阻止客户端,也许有超时,也许没有。无论哪种方式,AutoResetEvent
都只允许我支持 1 个客户端(因为它只唤醒 1 个等待线程),而我需要 n 个客户端。
我很确定我需要使用 ManualResetEvent
WaitHandle
,但我不确定何时调用 Reset
在我 Set
之后(唤醒线程时)。我应该简单地 Thread.Sleep
Set
之间的任意数量和重置
?
在伪代码中,唤醒逻辑是
ManualResetEventWaitHandle
Set
Reset
现在所有等待的客户端都已收到他们的更新这是我遇到困难的第 3 行。目前,我正在考虑让客户端/服务器维护一个 LastTxID
并可能使用 2 个等待句柄的想法。然而,在我对这个实现着迷之前,我想在这里获得反馈,看看他们将如何实现唤醒逻辑。
编辑:假设我已经通过调整 IIS 或通过 WCF 或其他解决方案托管来解决与最大并发用户相关的问题。我只想关注唤醒逻辑。
最佳答案
一个想法,伪代码
我很想得到一些关于这个的反馈
反对这种方法
关于c# - 我应该如何实现 Ajax 请求的长轮询的 C# 服务器端部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2731027/
我是一名优秀的程序员,十分优秀!