【问题标题】:Implementing comet pattern with Tomcat6用Tomcat6实现彗星模式
【发布时间】:2012-07-03 22:44:00
【问题描述】:

我刚刚了解了彗星模式(长轮询),并且非常想用 Tomcat6 作为容器来实现一个简单的示例。 我在这里要做的是 - 我将调用一个 servlet,它生成一个介于 1 和 20 之间的随机数,并根据该随机数它应该等待该秒数,然后再响应客户端。

例如:如果生成的随机数是 10 ,那么 servlet 应该等待 10 秒再发送响应。

这是我实现CometProcessor的servlet

public class RandomNumberGenerator extends HttpServlet implements CometProcessor {

doPost 方法:

        PrintWriter out =response.getWriter();
        Random r = new Random();
        int randomInt = r.nextInt(20) + 1;
        out.print(randomInt);
        out.flush();
        out.close();

现在,当我实现 CometProcessor 时,我有了一个事件方法:

@Override
    public void event(CometEvent event) throws IOException, ServletException {

    }

我想不通的是,我用这个event 方法做什么来做我想做的事。

我在这里知道的是,它们将是我可以在此方法中处理的一些事件,例如:BRGIN,READ,END,ERROR

我应该使用这样的事件吗?

if (event.getEventType() == CometEvent.EventType.BEGIN) {
    event.setTimeout(numberOfSecondToWait);
}

this 教程对我来说似乎有点复杂。

【问题讨论】:

    标签: java tomcat servlets comet long-polling


    【解决方案1】:

    我最近在WebSockets and Comet 上写了一篇博文,并请“彗星”的发明者提供他的意见。

    总之,亚历克斯说WebSockets replace Comet

    因此,尽管人们仍在使用 Comet,但它最终将被 WebSockets 取代,因为它们是专门为解决 Comet 解决方案所解决的问题而创建的。

    我建议您将注意力转移到 WebSockets。

    【讨论】:

    • 所有浏览器都支持WebSockets吗?
    • 浏览器支持的当前状态可以在这里看到:caniuse.com/#search=websockets WebSockets 不可用时的标准做法是使用web-socket-js polyfill。对于较旧的浏览器,您可以查看基于 Comet 的后备方案,或者直接使用标准轮询。后者并不理想,但它可能是我会采用的方式 - 或者逐步增强我的应用程序,如果浏览器不支持 WebSockets,那么用户的功能就会减少。
    • 今天我使用 DWR 实现了 comet,它按预期工作 :) 。好吧,我肯定会尝试 web-sockets,因为它看起来很有趣。谢谢你!
    猜你喜欢
    • 1970-01-01
    • 2011-12-28
    • 2013-02-09
    • 2011-04-21
    • 1970-01-01
    • 2011-01-13
    • 1970-01-01
    • 2016-07-23
    • 1970-01-01
    相关资源
    最近更新 更多