0

我们需要支持10k+用户,其中每个用户发起请求并等待来自服务器的响应(响应可能需要长达 20-30 秒才能到达)。它只是来自客户端的一个请求,经过服务器长时间的处理,会发送一个响应,然后断开连接。在后台,服务器会做一些数据库搜索并等待其他后台进程完成通知,然后再响应客户端。

在做了一些研究之后,我发现我们需要使用诸如大气框架之类的东西来支持 websockets/sse 事件/长轮询以及像netty (=> nettosphere ) 或jetty这样的异步服务器。至于我的经验——主要是 Java EE 世界和 Tomcat 服务器。

我的问题是:

  1. 就我的经验和我们的要求而言,什么更容易实施:大气+网络或大气+码头?哪一个可以更好地扩展,具有更容易的学习曲线并且更容易实现其他 Java 技术?

  2. 您如何在大气中实现仅发送给原始客户端而不广播给其他客户端的响应?(我找到的所有例子都是广播的)。

  3. 使用大气框架我们的响应时,我如何在netty(或码头)中实施?即,客户端发送一个请求,在服务器接收到它后,一些后台进程会运行,当它们完成时,我需要定位连接并传输响应。这是可以实现的吗?

4

2 回答 2

0

一些想法:

  1. 如果用户数超过 10k,响应延迟为 20-30 秒,如果仅使用 1 个网络接口,您可能会达到文件描述符限制。考虑使用多个网络接口的解决方案。

  2. 您对请求/响应的描述可以完全使用标准 Servlet 3.0、标准 HTTP/1.1、异步请求处理和大超时来处理。

  3. 如果您的客户端是 Web 浏览器,并且您直到 20-30 秒窗口才开始从服务器发送响应,您可能会遇到浏览器空闲超时。

  4. Atmosphere 和 Cometd 做同样的事情,支持长时间连接、连接技术回退和逻辑通道 API。

于 2013-07-02T20:58:33.683 回答
0

我相信 AKKA 框架会处理这种需求。我正在考虑使用它来处理可能使用 RabbitMQ 的扩展问题,以帮助将工作负载转移到可能在以后添加以根据需要扩展的其他服务器。

于 2013-12-12T04:50:30.413 回答