我读过通过使用 SIP 在 Tomcat 7 中异步处理 HTTP 请求可以提高 Web 应用程序的性能,但我不确定这是多么真实。我已经读到,当浏览器发出 HTTP 请求时,处理该请求的线程会生成一个新线程,该线程在 SIP 端点处等待新活动,然后释放最初处理该请求的线程。但是现在仍然有一个线程在 SIP 端点上闲置侦听。这真的更好吗?
1 回答
应该明确的是,虽然融合的 HTTP/SIP 应用程序可以在服务器端充分利用异步处理支持,但只有异步处理特性才能为 Web 服务器提供更高的性能。
Java Servlet 3.0 引入了对异步请求处理的支持,而 Apache Tomcat 7 实现了 Java Servlet 3.0,因此您可以支持异步处理。
Mobicents Sip Servlets 2.x (http://www.mobicents.org/products_sip_servlets.html) 平台已经与 Tomcat 7 集成,而团队正在努力与 JBoss AS 7 集成,这意味着一个融合的 HTTP/SIP 应用程序在 MSS 2.x 平台上运行,可以受益于异步处理支持。您可以在此处查看使用异步处理支持的融合 HTTP/SIP 应用程序示例。
Java Servlet 3.0 异步支持提供了一种在等待资源变为可用或等待事件时将请求放入队列的方法,并回收原始线程,从而使其可用于新客户端。当请求在队列中时,不会为此消耗任何 Web 服务器线程。这是处理可用 Web 服务器线程的更有效方式。
因此,对于您的问题,聚合应用程序无论如何都会等待某些 SIP 消息,例如 SIP INVITE 或 SIP BYE,并根据需要采取行动。如果现在在这张图片中添加 Java Servlets 3.0 异步处理,您可以拥有一个可以在每个 SIP 消息中更新的用户界面(客户端的网页),而无需任何昂贵的 AJAX 轮询机制或专有 API。这将通过在等待 SIP 消息时将客户端的请求放入队列中来实现,并且原始线程将被释放。当出现新的 SIP 消息时,将向客户端发送响应。
希望有帮助。