3

我是新手,但我真的很喜欢长轮询的想法。
在阅读了它之后,我会像这样实现它:

  1. 客户端请求服务器 (AJAX)
  2. 服务器正在轮询数据库以进行更改
  3. 识别出更改时或超时服务器响应后

我的问题是,对于每个请求,服务器上都会启动一个线程,而且每个线程都会轮询数据库。

在接受所有传入请求的服务器上运行一个线程不是更有效吗?像这样:

  1. 客户端请求服务器 (AJAX)
  2. 服务器将请求添加到队列(无响应)
  3. Worker-Thread 轮询数据库以获取与队列中所有请求相关的更改
  4. 当识别出更改时,服务器返回相应请求的结果

这样做的好处是,对数据库的轮询要少得多,并且所有请求都在一个线程中处理(更少的内存消耗)

我的问题:
这可能吗/是否有实现或框架?
(我们的项目还没有启动 jet 所以我们使用 PHP 还是 ASP.NET 都没有关系)

TIA 为您提供建议 =)

4

2 回答 2

2

检查node.js非阻塞 IO

于 2013-10-16T21:36:32.130 回答
0

我无法帮助您处理启动新线程的每个请求 - 我不知道是否有办法让单个线程处理所有请求,或者这是否是一个实用的解决方案。

可以让一个线程负责数据库轮询——我强烈推荐这样做,因为不需要多个线程同时查询完全相同的数据。

利用Application对象。IEApplication["ThreadActive"] = true;

if (!Application["ThreadActive"])
ThreadPool.QueueUserWorkItem(new WaitCallback (DBWatcher), objectdata);

让 DBWatcher 方法在内部循环 X 小时,变为Application["ThreadActive"]false,然后结束线程。当这个线程正在运行时,让它将它检索到的数据存储在一个Cache对象中。线程(或单线程,如果你可以管理它)将相应地观察Cache并响应长轮询。

我希望你能找到一个更有效的解决方案,但至少这会限制你与你的数据库建立一个开放的连接,而不是谁知道多少。

于 2013-10-16T22:02:45.970 回答