当前位置: 首页 > 知识库问答 >
问题:

在一个线程中排队请求以进行长轮询

曹伟泽
2023-03-14

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

  1. 客户端请求服务器(AJAX)
  2. 服务器正在轮询DB以获取更改
  3. 识别更改时或服务器响应超时后

我的问题是,对于每一个请求,都在服务器上启动一个线程,并且每个线程都轮询DB。

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

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

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

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

您的建议TIA=)

共有2个答案

暴骏奇
2023-03-14

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

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

使用application对象。IE应用程序[“ThreadActive”]=true;

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

让DBWatcher方法自身在内部循环X小时,将application[“threadactive”]转到false,然后结束线程。当线程运行时,让它将检索到的数据存储在cache对象中。线程(或者单线程,如果您可以管理的话)将监视cache并相应地响应长轮询。

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

樊桐
2023-03-14

检查node.js和非阻塞IO

 类似资料:
  • 请征求您的意见,我是Android编程新手。 我正在编写一个类似闹钟的软件,并使用公共类AlarmManagerBroadcastReceiver扩展BroadcastReceiver来捕获AlarmManager之前设置的警报 为了不中断UI,我在这个类的公共void onReceive(Context-Context,Intent-Intent)中使用新线程。一般情况如下: 公共类AlarmM

  • 问题 你有一个线程队列集合,想为到来的元素轮询它们, 就跟你为一个客户端请求去轮询一个网络连接集合的方式一样。 解决方案 对于轮询问题的一个常见解决方案中有个很少有人知道的技巧,包含了一个隐藏的回路网络连接。 本质上讲其思想就是:对于每个你想要轮询的队列,你创建一对连接的套接字。 然后你在其中一个套接字上面编写代码来标识存在的数据, 另外一个套接字被传给 select() 或类似的一个轮询数据到达

  • 我想在Spring Boot中遇到下面的用例。 我有一个第三方REST API,如果有任何东西要返回,它会尽快返回响应,或者花10秒钟发送空白响应。 我需要连续调用这个API,这意味着如果API返回响应,将该响应发送到进程,然后再次调用该API,这意味着我需要长时间轮询该API,但没有时间间隔,一旦我得到响应,就再次轮询。 我要独立线程处理响应。 这不是web应用程序。我只想用纯java(spri

  • 我是android新手,我试图发出http post请求,我得到了以下错误,我已经发布了我的代码和我的Logcat的一些行。我应该在另一个类中这样做吗?如果是,如何做,或者只是我必须在当前代码中修复的东西。 logview 02-18 10:03:20.477:W/DalvikVM(3759):ThreadId=15:线程退出,异常未捕获(组=0x4001D760) 02-18 10:03:20.

  • 问题内容: 我正在尝试在Flask框架下使用JQuery和Python进行长时间轮询。 在PHP中进行了长时间的轮询之后,我尝试以相同的方式进行处理: 具有while(true)循环的脚本/函数,定期检查更改,例如,数据库中每0.5秒更改一次,并在发生更改时返回一些数据。 因此,在我的ini .py文件中,我创建了一个到/ poll的app.route,以供JQuery调用。jQuery向其提供有

  • 我使用 asp.net webapi 编写了一个 api,并将其作为应用服务部署在 Azure 中。我的控制器的名称是测试控制器,我的操作方法类似于波纹管。 因此,对于每个请求,它应该在返回字符串“值”之前等待10秒。我还编写了另一个endpoint来查看threadpool中执行请求的线程数量。那个动作有点像贝娄。 现在,当我们同时对 Test/Get 终结点进行 29 次 get 调用时,需要