我正在用 Java 编写一个需要每秒处理大量请求的 Web 服务。一般流程将是:
- Web 服务接收来自客户端的请求
- 向客户端返回“继续轮询我”响应
- 调用另一个 Web 服务(或服务),并等待它们响应(超时)
- 客户端轮询我们的 Web 服务,直到它收到响应(超时)
在互联网上研究,我发现了两种编写 Web 服务的通用方法:
- 为每个请求生成一个线程
- 使用 Reactor 模式(中央调度线程响应 IO 事件)
您对哪种方法通常更好有什么建议,每种方法的优缺点是什么?我也将不胜感激的例子。
我正在用 Java 编写一个需要每秒处理大量请求的 Web 服务。一般流程将是:
在互联网上研究,我发现了两种编写 Web 服务的通用方法:
您对哪种方法通常更好有什么建议,每种方法的优缺点是什么?我也将不胜感激的例子。
不要认为多线程。异步思考。我碰巧刚刚编写了一个异步处理程序,该处理程序在 IIS 中运行 2,000 RPS,线程少于 10 个。由于我是 .net 人,因此不确定 java 是如何工作的,但我必须相信他们有类似的 BeginXXX/EndXXX 方法。如果你曾经产生一个线程,那么你就没有考虑你的代码可以阻塞的所有地方:数据库 IO、文件 I/O、Web 服务等。这些地方是你的性能会导致你的网站变慢的地方。
异步,异步,异步。
吟唱并重复。
异步确实是正确的方法,但不要自己管理,使用支持异步 Web 服务调用的东西,如 JAX-WS 2.0(它使用Future
接口和/或Executor
框架java.util.concurrent
)。请参阅使用 JAX-WS 2.0 的异步 Web 服务调用。
除了“不退款不退货”响应之外,我会说是的“异步思考”,因为您应该允许您的容器管理它已部署的 Web 服务的多线程/可扩展性和高可用性问题,这允许您可以使用应用程序容器设置集群等内容。
编辑:总之,没有这样的模式,也许你应该探索你的应用程序容器的可扩展性/可用性特性......