首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >comet和超时

comet和超时
EN

Stack Overflow用户
提问于 2012-07-20 01:38:54
回答 1查看 717关注 0票数 0

嗨,我正在尝试,因为很长一段时间在tomcat中使用comet制作聊天应用程序。问题是,我在云中部署了应用程序,其中开放连接的上限是30秒。因此,每次服务器响应时间超过30秒(比如没有聊天消息需要推送时),客户端都会收到一个504异常。

那么,这是否意味着彗星技术在我们有时间上限的情况下不起作用?

附加代码片段

代码语言:javascript
复制
package com.cumulations.clique.ChatHandler;
public class AsynchronousGetChatHandler extends HttpServlet implements
    CometProcessor {

public static HashMap consumerConnectionQueue = new HashMap();
public static HashMap consumerPoolingQueue = new HashMap<String, String>();
public static HashMap consumerSessionQueue = new HashMap<String, Date>();

public static ConnectionFactory factory;
public static Connection connection;

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

    HttpServletRequest request = event.getHttpServletRequest();
    HttpServletResponse response = event.getHttpServletResponse();

    String userName = request.getParameter("userName");
    String sessionId = request.getParameter("accesskey");

    AsynchronousGetChatHandler.consumerPoolingQueue.put(userName, "ON");

    try {

        if (event.getEventType() == CometEvent.EventType.BEGIN) {

            String str = fromRabitQ(userName);

            if (str != null) {


                    System.out.println("delivering a message: " + str);

                    PrintWriter writer = response.getWriter();
                    writer.println(str);
                    writer.flush();
                    writer.close();
                }

             else {
                PrintWriter writer = response.getWriter();
                writer.println("");
                writer.flush();
                writer.close();
            }
        }
    }

    catch (Exception e) {
        throw new ServletException("Recieving exception");

        // TODO: handle exception
    }

}

public static String fromRabitQ(String userName) throws Exception {
    try {

        Channel channel;
        QueueingConsumer consumer;

        String QUEUE_NAME = userName;
        String message = "";

        connection = RabbitMqConnection.getConnection();

        channel = connection.createChannel();

        channel.queueDeclare(QUEUE_NAME, true, false, false, null);
        consumer = new QueueingConsumer(channel);
        channel.basicConsume(QUEUE_NAME, true, consumer);

        QueueingConsumer.Delivery delivery;

        delivery = consumer.nextDelivery(27000);

        if (delivery != null) {
            message = new String(delivery.getBody());

        } else {
            message = null;
        }

        channel.basicCancel(consumer.getConsumerTag());
        channel.close();

        return message;
    }

    catch (Exception e) {
        System.out.println("Exception occured while receiveing " + e);
        throw e;
    }

}

}

EN

回答 1

Stack Overflow用户

发布于 2012-08-04 09:05:41

代码语言:javascript
复制
delivery = consumer.nextDelivery(27000);

至:

代码语言:javascript
复制
 delivery = consumer.nextDelivery(20000);

另外,如果你也能提供你的RabbitMqConnection实现,那就更好了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11566348

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档