有人可以解释一下ajax-push是什么吗?据我所知,它涉及长时间保持HTTP连接打开并根据需要重新连接。它似乎在聊天系统中使用了很多。
我也听说过在Java中使用ajax-push时,使用NIO-connetors或grizzle serlvet api是很重要的?再一次,我只是在研究它究竟是什么。
答案 0 :(得分:4)
在普通的AJAX(称之为 pull )中,你要求服务器提供一些东西,然后立即得到它。当您想从服务器现在获取一些数据时,这很好。但是如果服务器上发生了什么事情并且服务器想要将该事件推送到客户端呢?
从技术上讲,这是使用所谓的长轮询实现的 - 浏览器打开HTTP连接并等待响应。只要服务器端没有任何有趣的东西,它就会等待。但是当发生某些事情时,服务器会发送响应,客户端会立即收到 。与普通轮询相比,这是一个巨大的优势,您每隔几秒就会询问一次服务器 - 它会产生大量流量并且仍会引入明显的延迟。
此方法的唯一问题是挂起的HTTP连接数。由于每个连接一个线程的限制,旧式Java servlet容器不能完全处理这样的连接数 - 它们很快就会耗尽内存。即使HTTP线程没有做任何事情(等待系统的其他部分唤醒它们并给它们响应),它们也会占用内存。
然而现在有很多解决方案:
Tomcat NIO connectors
Atmosphere Ajax Push / Comet库
Servlet 3.0 @Async
(最便携)
特定于容器的功能,但Servlet 3.0(如果可用)应该被认为是优越的。