在cometd中建立websocket失败

时间:2014-01-03 10:01:18

标签: java cometd bayeux

我使用cometd和bayeux服务器编写应用程序,以在服务器和客户端之间发送/接收消息

但是当cometd创建websocket到服务器时,服务器总是返回代码400:

  

“与'ws:// localhost:8080 / APServer / cometd'的WebSocket连接失败:意外响应代码:400”

我的客户端配置了cometd:

cometd.configure({
    url: cometURL,
    logLevel: 'debug',
    appendMessageTypeToURL: false
});
cometd.addListener('/meta/handshake', _metaHandshake);
cometd.addListener('/meta/connect', _metaConnect);
cometd.websocketEnabled = true;
cometd.handshake();

我的服务器web.xml如下:

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns="http://java.sun.com/xml/ns/javaee"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
     version="3.0">
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
    <welcome-file-list>
        <welcome-file>3.main.html</welcome-file>
    </welcome-file-list>
   <servlet>
        <servlet-name>cometd</servlet-name>
        <servlet-class>org.cometd.server.CometdServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
        <!--init-param>
            <param-name>transports</param-name>
            <param-value>org.cometd.websocket.server.WebSocketTransport</param-value>
        </init-param-->
        <async-supported>true</async-supported>
        <init-param>
            <param-name>logLevel</param-name>
            <param-value>3</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>cometd</servlet-name>
        <url-pattern>/cometd/*</url-pattern>
    </servlet-mapping>
    <servlet>
        <servlet-name>configuration</servlet-name>
        <servlet-class>jp.co.ntt.lab.multiline.web.init.ConfigurationServlet</servlet-class>
        <load-on-startup>2</load-on-startup>
    </servlet>
    <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>
</web-app>

1 个答案:

答案 0 :(得分:0)

web.xml您已注释掉指定其他传输的部分,并实际定义了WebSocket传输。

因此,您的服务器没有WebSocket支持(因为您已将其评论出来),这就解释了为什么您的客户端会收到您报告的错误。

如果您取消注释该部分,WebSocket应该可以正常工作。