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