如何让spring+cometd支持websocket?

     2023-02-16     207

关键词:

【中文标题】如何让spring+cometd支持websocket?【英文标题】:How can I let spring+cometd support webscoket? 【发布时间】:2013-07-19 08:55:14 【问题描述】:

我使用 chrome,它总是返回:

WebSocket connection to 'ws://192.168.1.228:9090/achat/cometd' failed: Unexpected response code: 400

出现此错误后,它使用长轮询传输,并成功连接到服务器。

如何让 WebSocket 工作?它是由使用 SpringFramework 3.1 引起的吗?谢谢。

Web.xml

<!-- Filter to support cross domain requests -->
<filter>
    <filter-name>cross-origin</filter-name>
    <filter-class>org.eclipse.jetty.servlets.CrossOriginFilter</filter-class>
    <!--async-supported>true</async-supported-->
</filter>
<filter-mapping>
    <filter-name>cross-origin</filter-name>
    <url-pattern>/cometd/*</url-pattern>
</filter-mapping>
<!-- Cometd Servlet -->
<servlet>
    <servlet-name>cometd</servlet-name>
    <servlet-class>org.cometd.annotation.AnnotationCometdServlet</servlet-class>
    <!--async-supported>true</async-supported-->
    <init-param>
        <param-name>timeout</param-name>
        <param-value>20000</param-value>
    </init-param>
    <init-param>
        <param-name>interval</param-name>
        <param-value>0</param-value>
    </init-param>
    <init-param>
        <param-name>maxInterval</param-name>
        <param-value>10000</param-value>
    </init-param>
    <init-param>
        <param-name>maxLazyTimeout</param-name>
        <param-value>5000</param-value>
    </init-param>
    <init-param>
        <param-name>long-polling.multiSessionInterval</param-name>
        <param-value>2000</param-value>
    </init-param>
    <init-param>
        <param-name>logLevel</param-name>
        <param-value>100</param-value>
    </init-param>
    <init-param>
        <param-name>transports</param-name>
        <param-value>org.cometd.websocket.server.WebSocketTransport</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>cometd</servlet-name>
    <url-pattern>/cometd/*</url-pattern>
</servlet-mapping>

Servlet

@Named
@Singleton
@Service
public class ChatService 
    @Inject
    private BayeuxServer bayeux;
    @Session
    private ServerSession serverSession;

    @Listener("/chat")
    public void processHello(ServerSession remote, ServerMessage.Mutable message)
    
        Map<String, Object> input = message.getDataAsMap();
        String room = input.get("room").toString();
        String content = input.get("content").toString();

        Map<String, Object> output = input;        
        bayeux.getChannel("/room/" + room).publish(remote, output, null);
    

【问题讨论】:

【参考方案1】:

关注CometD Reference Manual,特别是解释如何集成CometD with Spring的部分。

您可以在此处找到使用 Spring 的 XML 配置设置 WebSocket 的示例,以及如何通过注释配置 Spring 的示例。

您的问题缺少 Spring 配置文件和 web.xml 文件的一部分,因此很难以更详细的方式帮助您。

请记住,如果您在 Spring 中配置 CometD,那么您必须从 web.xml 中删除所有 CometD 配置。您必须只有一个地方可以进行配置:web.xml 或 Spring 的 XML/注解。

【讨论】:

如何让spring5.x支持velocity

新版spring5.0已经移除了对velocity的支持,下面就说说如何让spring5.x支持velocity。spring从4.3开始不再支持velocity,官方说法是:Velocity1.7datesbackto2010.Aftermorethanfiveyearsofnomaintenanceintheoriginalproject,it' 查看详情

Spring Boot + CometD + CorFilter:在 SecurityContext 中找不到 Authentication 对象

】SpringBoot+CometD+CorFilter:在SecurityContext中找不到Authentication对象【英文标题】:SpringBoot+CometD+CorFilter:AnAuthenticationobjectwasnotfoundintheSecurityContext【发布时间】:2019-10-2816:13:37【问题描述】:我的项目是SpringBoot1.5.19&SpringSec 查看详情

如何让 spring boot cloud/actuator 支持 prometheus Exemplars?

】如何让springbootcloud/actuator支持prometheusExemplars?【英文标题】:Howtogetspringbootcloud/actuatortosupportprometheusExemplars?【发布时间】:2021-09-1111:57:32【问题描述】:Exemplars支持本质上将trace-id添加到正在抓取的指标中。我找到了一个关... 查看详情

提供多个端点的 Cometd 可能不会部署到同一路径 [/cometd]

...布时间】:2015-04-1309:57:09【问题描述】:我正在开发一个Spring-MVC应用程序,我正在尝试将聊天功能与Cometd集成。我收到无法在同一路径中部署多个端点的错误。错误日志:org.springframe 查看详情

如何让spring5.x支持velocity

新版spring5.0已经移除了对velocity的支持,下面就说说如何让spring5.x支持velocity。spring从4.3开始不再支持velocity,官方说法是:Velocity1.7datesbackto2010.Aftermorethanfiveyearsofnomaintenanceintheoriginalproject,it'sabouttimetodeprecateVelocitysu... 查看详情

如何将 GWT 连接到 CometD/Bayeux 事件?

】如何将GWT连接到CometD/Bayeux事件?【英文标题】:HowcanIconnectGWTtoCometD/Bayeuxevents?【发布时间】:2010-12-2609:00:25【问题描述】:我有一个GWT应用程序,当它们进入时,它需要定期用新的刻度项更新屏幕。我们还有由CometD/Bayeux服务... 查看详情

如何启动 ajax 推送网站(activemq 或 cometd 或其他)?

】如何启动ajax推送网站(activemq或cometd或其他)?【英文标题】:HowcanIstartajaxpushwebsite(activemqorcometdorsomethingelse)?【发布时间】:2010-11-0923:07:59【问题描述】:我想启动一个将使用ajax推送的应用程序,但是应该正确配置Web服务器... 查看详情

OSGi、Jetty 和 CometD/Bayeux

】OSGi、Jetty和CometD/Bayeux【英文标题】:OSGi,JettyandCometD/Bayeux【发布时间】:2012-01-2010:10:18【问题描述】:我已经让Jetty和Bayeux协同工作,让我可以将comet与dojo一起使用。但是,我现在需要迁移到OSGi码头环境并且正在努力使其正常... 查看详情

cometd简单用例

准备工作整个例子的源码下载:http://pan.baidu.com/s/1gfFYSbp下载服务端jar文件Comet4J目前仅支持Tomcat6、7版本,根据您所使用的Tomcat版本下载【comet4jtomcat6.jar】或【comet4j-tomcat7.jar】文件放置到WEB项目的WEB-INFlib目录下。本文下载comet4j-t... 查看详情

配置spring的注解支持

...来配置依赖对象会方便简单一些,所以以下简单介绍一下如何配置Spring的注解,让Spring能过够通过注解的方式来对类进行管理。Spring配置文件内容修改如下: 在Student类上加上@Component 查看详情

Cometd vs ActiveMQ 用于实时 Web 应用程序的服务器端推送

】CometdvsActiveMQ用于实时Web应用程序的服务器端推送【英文标题】:CometdvsActiveMQforserversidepushforrealtimewebapplications【发布时间】:2013-03-1606:34:23【问题描述】:我们需要为实时Web应用程序开发服务器端推送基础设施。为此,我一直... 查看详情

如何使用类 + spring 4.0.0 配置 websocket 句柄

】如何使用类+spring4.0.0配置websocket句柄【英文标题】:howtoconfigurewebsockethandleusingclass+spring4.0.0【发布时间】:2015-07-2210:24:09【问题描述】:任何人都可以帮助我如何配置这个websocketbean和处理程序使用类库而不是xml文件。<beanid=... 查看详情

如何告诉 Spring Boot 忽略 Jetty 并始终使用 Tomcat?

...-bootapplication(usingembeddedtomcat)spring-date-neo4j(embeddedmode)spring-websock 查看详情

用于 iPhone 的 CometD/Bayeux 客户端

】用于iPhone的CometD/Bayeux客户端【英文标题】:CometD/Bayeuxclientforiphone【发布时间】:2011-10-0523:04:24【问题描述】:我正在寻找适用于iPhone的Bayeux/CometD客户端。Objective-C实现会起作用。知道我可以从哪里得到它吗?或者知道如何为i... 查看详情

CometD 长轮询 - 它是不是可以很好地适应高流量?

】CometD长轮询-它是不是可以很好地适应高流量?【英文标题】:CometDlongpolling-Doesitscalenicelytohightraffic?CometD长轮询-它是否可以很好地适应高流量?【发布时间】:2014-10-0512:40:10【问题描述】:如果我使用CometD长轮询:假设每秒有... 查看详情

如何让spring jpa自动创建关系/表?

】如何让springjpa自动创建关系/表?【英文标题】:Howtogetspringjpatocreaterelation/tableautomatically?【发布时间】:2021-04-0114:38:45【问题描述】:我正在尝试让Spring为我的实体类生成表。我不确定我错过了什么,这是我第一次使用容器化... 查看详情

在 Android 上使用 Cometd/Bayeux 的系统要求

】在Android上使用Cometd/Bayeux的系统要求【英文标题】:SystemrequirementsforCometd/BayeuxUsageonAndroid【发布时间】:2011-02-1018:47:30【问题描述】:我正在尝试使用iJetty在Android上实现Cometd/Bayeux服务器。Jetty实现本身可以很好地与servlet一起... 查看详情

Spring:如何让过滤器抛出自定义异常?

】Spring:如何让过滤器抛出自定义异常?【英文标题】:Spring:Howtomakeafilterthrowacustomexception?【发布时间】:2017-10-1720:26:33【问题描述】:我创建了一个过滤器,用于验证JWT令牌的每个请求标头:publicclassJWTAuthenticationFilterextendsGene... 查看详情