我们要求支持 10k + 用户,其中每个用户发起请求并等待来自服务器的响应(响应可能需要长达20-30秒才能到达)。它只是来自客户端的一个请求,经过服务器的长时间处理后,将发送响应,然后连接将断开连接。 在后台,服务器将进行一些数据库搜索,并在响应客户端之前等待其他后台进程在完成时通知。
在做了一些研究后,我发现我们需要使用类似氛围框架的东西来支持websockets / sse事件/长轮询以及像 netty 这样的异步服务器(=> nettosphere )或码头。 至于我的经验 - 主要是Java EE世界和Tomcat服务器。我的问题是:
根据我的经验和要求,哪些更容易实施:氛围+网络或atmoshphere +码头?哪一个可以更好地扩展,更容易学习,更容易实现其他Java技术?
你如何在大气层中实现仅发送给原始客户端而不是广播给其他客户端的响应? (我找到的所有例子都是广播的。)
如何在使用大气框架我们的响应时在netty(或jetty)中实现?即,客户端发送请求,在服务器中接收到一些后台进程后,当它们完成时,我需要找到连接并发送响应。是可以实现的吗?
答案 0 :(得分:0)
一些想法:
对于10k +用户,响应延迟为20-30秒,如果仅使用1个网络接口,则可能会达到文件描述符限制。考虑使用多个网络接口的解决方案。
您的请求/响应的描述可以完全使用标准的Servlet 3.0,标准HTTP / 1.1,异步请求处理和大量超时来处理。
如果您的客户是网络浏览器,并且您没有开始从服务器发送响应,直到20-30秒窗口,您可能会遇到浏览器空闲超时。
Atmosphere和Cometd做同样的事情,支持长时间连接,连接技术回退以及逻辑通道API。
答案 1 :(得分:0)
我相信AKKA框架将满足这种需求。我正在考虑使用它来处理可能使用RabbitMQ的扩展问题,以帮助将负载卸载到可能稍后添加的其他服务器,以便根据需要进行扩展。