Не удалось установить веб-узел в cometd

Я пишу приложение, используя cometd с сервером bayeux, для отправки / получения сообщения между сервером и клиентом

Но когда cometd создает веб-узел для сервера, сервер всегда возвращает код 400:

«Ошибка подключения WebSocket к 'ws: // localhost: 8080 / APServer / cometd': неожиданный код ответа: 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>

person KhanhQuach    schedule 03.01.2014    source источник
comment
какой контейнер сервлетов вы используете и какую версию? Поддержка WebSocket для CometD надежно работает только в Jetty 7 или выше.   -  person sbordet    schedule 04.01.2014
comment
уважаемый сбордет, на самом деле я пользователь jetty 7.x.x   -  person KhanhQuach    schedule 04.01.2014


Ответы (1)


В вашем web.xml вы закомментировали раздел, который определяет дополнительные транспорты и который фактически определяет транспорт WebSocket.

Следовательно, ваш сервер не поддерживает WebSocket (потому что вы его закомментировали), и это объясняет, почему ваш клиент получает сообщение об ошибке.

Если вы раскомментируете этот раздел, WebSocket должен работать.

person sbordet    schedule 04.01.2014