在服务器上实现长轮询

3
我正在尝试在我的JavaScript客户端和处理HTTP请求的服务器上开发长轮询。在服务器上,我有一个监听请求并处理它们的Restlet,在客户端中,我有一个Javascript API,它使用XMLHttpRequest对象进行HTTP调用。
现在,我在JS中有一个延迟3秒的setTimeOut,它会轮询服务器,在大多数请求中我什么也没有收到,我想实现长轮询。我的问题是,如果我必须在我的服务器上实现长轮询逻辑,我的Reslet使用的是Jetty,我想实现像'Thread.sleep'这样的东西,直到有任何要发送给客户端的内容?还是我可以在Java或Restlet中本地实现,而不需要长时间的实现?
感谢你的答复!

你可以通过每次响应为空时将延迟增加2倍(这样延迟就会变成3/6/12/24/48/96/...秒),然后在接收到内容时再将其设置为3秒来增加延迟。 - Fabrizio Calderan
但是,在这种情况下,当我进行第五次拉取并且为空时,下一次拉取将需要96秒?...非常长的时间,因此我想替换为长轮询。 - Kalamarico
如果你对新技术持开放态度:请看一下http://socket.io/。服务器端是node.js。它使用websockets,比长轮询更好,并且有几个备选方案,如果websockets不可用。 - Christoph
Websockets是一个不错的解决方案,但是目前无法将我的Java / Restlet服务器更改为Node.js,谢谢。 - Kalamarico
1个回答

0

实际上,我已经使用 Java 并发的 wait() 和 notify() 系统来实现长轮询 Java 对象。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接