我正在使用一个IHttpAsyncHandler
来服务彗星/长轮询请求。处理程序使连接保持打开状态并将MyAsyncResult
对象保存在 staticConcurrentSet<MyAsyncResult>
中。
当发出单独的请求(导致彗星响应的请求)时,程序会MyAsyncResult
在列表中找到对象并完成请求。
我的问题是,当我将应用程序更改为在 Webgarden 中运行时,这个静态变量不会在所有工作进程之间共享,所以这个实现不会起作用。
现在,我无法将MyAsyncResult
对象存储在 SQL 数据库中,或者任何可能有用的对象(如IHttpHandler
自身,或指向 EndProcessRequest 方法的委托等)中。我可以将某些 ID 和字符串存储在 SQL 数据库中,并不断检查新值,但这似乎很昂贵,并且首先违背了使用长轮询的目的。
有什么方法可以在网络花园中分享我的静态ConcurrentSet
内容吗?或者我可以通过任何其他方式让IHttpAsyncHandler
坐在那里等待信号发送它的响应?
编辑:
如果我无法跨进程共享变量,有没有办法可以向所有其他工作进程广播?我在这里只需要一个带有两个整数参数的信号。