gpt4 book ai didi

multithreading - Tomcat中的线程休眠

转载 作者:行者123 更新时间:2023-11-28 22:23:18 28 4
gpt4 key购买 nike

我正在编写一个 VXML 应用程序,它接受传入的 SIP 语音调用,然后轮询在同一主机上的 Tomcat 实例上运行的 Java 应用程序上的 Web 服务以获取传入的语音请求(例如,播放音频提示或收集一些数字)从一个单独的 channel 。这些语音请求通过单独的 WS 接口(interface)接收并缓存以供 VXML session 收集。语音请求可能会在调用被接受后的 0.5 秒到 30 秒以上的任何时间收到。

从逻辑上讲,VXML session 应定期轮询新请求,并且 Tomcat 中的 Java 应用程序会返回一个非阻塞响应,指示是否已收到任何请求。然而,我还有一个额外的限制,即从 VXML 解释器进行 Web 服务调用的 CPU 成本非常高,因此对大量同时调用定期重复此操作将显着影响系统容量。

首选方法是让 Web 应用程序阻止来自 VXML 应用程序的轮询,直到语音服务请求到达缓存(超时时间为 5 或 10 秒)。但是,我知道在 servlet 线程上长时间使用 Thread.sleep 在最好的时候是一个坏主意,所以我正在寻找实现此目的的替代方法。

此应用程序需要支持服务器上的大量并发 session (预计在计划的硬件上最多 1000 个 VXML session ),因此仅增加 Tomcat 上的线程数是 Not Acceptable 。

有没有一种方法可以让 Tomcat 将请求搁置一段时间,同时为其他请求释放 servlet 线程?有没有可能,当我使用 Thread.sleep 时,Tomcat 是否足够智能以简单地执行此操作? :-)

谢谢, Facebook

最佳答案

Java中长时间运行的请求和非阻塞I/O一般被称为“ cometd ”。 Tomcat 6 以专有方式支持这一点,并将其纳入 Servlet 3.0 规范。

参见 this article了解如何做到这两点。

关于multithreading - Tomcat中的线程休眠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4852440/

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