i use chrome, return:
websocket connection 'ws://192.168.1.228:9090/achat/cometd' failed: unexpected response code: 400 after error, use long-polling transport, , success connect server.
how can let websocket work? caused using springframework 3.1? thanks.
web.xml
<!-- filter 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); } }
follow cometd reference manual, section explains how integrate cometd spring.
there can find example uses spring's xml configuration setup websocket, , example of how configure spring via annotations.
your question lacks spring configuration file , part of web.xml file difficult in more detailed way.
just remember if configure cometd in spring, must remove cometd configuration web.xml. must have 1 place configure things: either web.xml or spring's xml/annotations.
Comments
Post a Comment