- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
嗨,很长一段时间以来,我一直在尝试在 tomcat 中使用 comet 制作聊天应用程序。问题是我已经在云中部署了应用程序,其中开放连接有 30 秒的上限。因此,每当服务器需要超过 30 秒的时间来响应时(比如没有聊天消息要推送时),客户端都会收到 504 异常。
那么这是否意味着 cometd 技术在我们有时间上限的情况下不起作用?
附上代码片段
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;
}
}
最佳答案
我会说继续修改
delivery = consumer.nextDelivery(27000);
到:
delivery = consumer.nextDelivery(20000);
此外,如果您还可以提供 RabbitMqConnection 的实现,那就太好了。
关于tomcat - cometd 和超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11566348/
我只是 cometd 的初学者,我很感兴趣并想了解什么是 cometd 以及它的用途我用谷歌搜索并找到了一些资源。在以下链接下 1. http://docs.cometd.org/reference/
正如标题所说,我正在开发网络聊天应用程序,我希望其中有很多用户活跃,并且不能使用 ajax 轮询。我基本上想让一个人 2 人聊天,但请原谅我是一个菜鸟,但我真的迷路了。我读过很多关于 cometd 的
我正在开发我目前正在使用的 Spring-MVC 应用程序在 Apache tomcat 7.0.55 上使用 Cometd 实现聊天功能。我有基本的代码在运行,我可以通过 channel 发送消息并
我正在尝试在 Jetty 9.2 上运行我们的 Spring-MVC 应用程序,该应用程序具有 Cometd(3.0.9)。目前它与 Tomcat7 完美配合,但我们正在将 Jetty 作为另一个应用
我可以通过简化版本的示例来最好地描述我正在寻找的内容。 Tornado 的演示之一是一个简单的聊天服务器: https://github.com/facebook/tornado/blob/maste
它的功能就是所谓的“服务器推送”,google wave 似乎也利用了这一点。 有人能解释一下这个概念通过代码片段 它如何在 Web 应用程序中实际工作? 最佳答案 一些伪javascript: /
我在本地主机上使用Orbited作为Comet服务器。它正在监听端口: 9000 for http 61613 for stomp 我的JavaScript调试器报告错误:未在行中定义JSON: va
我在向客户端发回消息时遇到问题。下面是我的代码 JavaScript dojox.cometd.publish('/service/getservice', {
我正在考虑编写一个需要能够将消息推送到浏览器的实时网络应用程序。当我第一次阅读 Comet 时,由于浏览器支持薄弱,人们似乎认为它是一种脆弱且不成熟的方法。今天,它似乎是一种既定又实用的技术。但据我所
对于不需要“实时”但可能延迟(例如 1 分钟)的事件是否值得使用 Comet。这样将是: 推特状态更新 Facebook 更新 我知道 comet 非常适合聊天应用程序(facebook 和 GTal
我对 java 中的 cometd 很陌生。 我对 java 中的 cometd 更感兴趣,但是当我用 google 搜索它时,我几乎找不到一个链接这是 cometd 链接,文档中不清楚。 有人可以发
我开发 Web 应用程序已经有一段时间了,但最近才接触到 Comet 服务器端推送技术,我对这项技术的理解还很不成熟。而链接http://www.zeitoun.net/articles/comet_
我有一个 cometd 应用程序在 jetty 内运行。我想从客户端获取传入的广播,然后进行一些处理(涉及与数据库交互),然后如果没有遇到错误,则通过向所有订阅者广播来完成。 我最初的想法是通过扩展来
是否有基于 .net 的 cometd 引擎?比如 Ajax 推送引擎 那是免费和开源的吗? 最佳答案 轨道式 Orbited是一个 HTTP 守护进程,针对长期 cometd 连接进行了优化。它旨在
我有一些关于 Comet 的信息,但我想知道它如何保持连接打开(从客户端到服务器)。它是如何做到的? 最佳答案 从长远来看,Comet 或长轮询 ajax 不会保持连接打开。 HTTP 是无状态的,它
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我正在尝试在我的应用程序中实现 Comet,但由于没有使用 JavaScript 的经验,我不确定如何在客户端实现。 当服务器收到一个请求时,它只是保持它打开并在必要时向它写入数据: def rend
我一直在我的网络应用程序的日志文件中看到奇怪的消息。 127.0.0.1 - - [15/Jan/2013:23:00:53 +0000] "POST /cometd/connect HTTP/1.1
嗨,很长一段时间以来,我一直在尝试在 tomcat 中使用 comet 制作聊天应用程序。问题是我已经在云中部署了应用程序,其中开放连接有 30 秒的上限。因此,每当服务器需要超过 30 秒的时间来响
我有一个关于 Comet 实现的问题。我知道它用于处理类似于现在可以通过 Servlet 3.0 异步功能实现的异步请求。然而,我不明白的是如何向调用客户端完成推送。 在网络套接字中,我们通过提供 i
我是一名优秀的程序员,十分优秀!