我是新手,但我非常喜欢长轮询的想法 阅读完之后我会像这样实现它:
我的问题是,对于每个请求,在服务器上启动一个线程,每个线程轮询数据库。
在接受所有传入请求的服务器上运行单个线程会不会更有效?像这样:
这样做的好处是,DB轮询更少,所有请求都在一个线程中处理(内存消耗更少)
我的问题:
这可能/是否有实施或框架?
(我们的项目还没有启动jet,所以我们是否使用PHP或ASP.NET无关紧要)
TIA的建议=)
答案 0 :(得分:2)
答案 1 :(得分:0)
我无法帮助你开始一个新线程的每个请求 - 我不知道是否有办法让一个线程处理所有请求,或者这是否是一个实际的解决方案。
你可以有一个线程负责数据库轮询 - 我强烈推荐这个,因为不需要让多个线程同时查询完全相同的数据。
使用Application
对象。 IE Application["ThreadActive"] = true;
if (!Application["ThreadActive"])
ThreadPool.QueueUserWorkItem(new WaitCallback (DBWatcher), objectdata);
让DBWatcher方法在内部循环X小时,将Application["ThreadActive"]
变为false,然后结束线程。在此线程运行时,让它将它检索的数据存储在Cache
对象中。线程(或单线程,如果你可以管理它)将观察Cache
并相应地响应长轮询。
我希望你能找到一个更有效的解决方案,但至少这会限制你与你的数据库建立一个开放的连接而不是谁知道多少。