gpt4 book ai didi

c# - 我应该如何实现 Ajax 请求的长轮询的 C# 服务器端部分?

转载 作者:行者123 更新时间:2023-11-30 18:44:32 26 4
gpt4 key购买 nike

我有一个架构涉及浏览器每 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 或其他解决方案托管来解决与最大并发用户相关的问题。我只想关注唤醒逻辑。

最佳答案

一个想法,伪代码

  • 维护一个线程安全的连接 ID 列表,可能使用 session ID
  • 为每个连接提供自己的 AutoResetEventWaitHandle
  • 以线程安全的方式,遍历那些等待句柄并在有更新时设置它们
  • 在 session 结束时,以线程安全的方式,从列表中删除该连接/ session ID

我很想得到一些关于这个的反馈

反对这种方法

  • 必须维护一个连接列表
  • 必须为 {n} 个客户端生成 {n} 个等待句柄

关于c# - 我应该如何实现 Ajax 请求的长轮询的 C# 服务器端部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2731027/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com