-1

私はクロムを使用していますが、常に次のように返されます:

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>

サーブレット

@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);
    }
}
4

1 に答える 1

0

CometD Reference Manual 、特にCometD と Springを統合する方法を説明するセクションに従ってください。

そこでは、Spring の XML 構成を使用して WebSocket をセットアップする例と、アノテーションを介して Spring を構成する方法の例を見つけることができます。

あなたの質問にはSpring構成ファイルとファイルの一部が欠けているweb.xmlため、より詳細な方法であなたを助けることは困難です.

Spring で CometD を構成する場合は、すべての CometD 構成を から削除する必要があることに注意してくださいweb.xml。構成する場所は 1 つだけである必要がありますweb.xml。Spring の XML/アノテーションのいずれかです。

于 2013-07-19T10:19:45.847 に答える