javascript - How to force Atmosphere.js to use the preferred transport when reconnecting to the Server? -


when preferred transport fails, atmosphere tries use fallback transport. tried reconnect maxreconnect times. after calls onclose , onerror.

when try subscribe again atmosphere uses fallback transport connection.

here client configuration:

atmosphererequestconfig jsonrequestconfig = // ... jsonrequestconfig.settransport(atmosphererequestconfig.transport.websocket);  jsonrequestconfig.setfallbacktransport(atmosphererequestconfig.transport.long_polling); jsonrequestconfig.setloglevel("debug"); jsonrequestconfig.setmaxreconnectonclose(1); atmosphere atmosphere = atmosphere.create(); clientrequest = atmosphere.subscribe(jsonrequestconfig); 

when server running , client connects first time (page reload) connection on websockets. stopped server client shows this:

atmosphere.js:3252 sat jan 30 2016 22:17:14 gmt+0100 (cet) atmosphere: websocket.onclose atmosphere.js:3252 websocket closed, reason: normal closure; connection completed whatever purpose created. - wasclean: true atmosphere.js:3252 sat jan 30 2016 22:17:14 gmt+0100 (cet) atmosphere: firing onclose (closed case) consolelogger.java:32 atmospherelistener: onclose atmosphere.js:3252 sat jan 30 2016 22:17:14 gmt+0100 (cet) atmosphere: request closed, not firing onclose (closed case) atmosphere.js:3252 sat jan 30 2016 22:17:14 gmt+0100 (cet) atmosphere: invoking .close() on websocket object atmosphere.js:3252 sat jan 30 2016 22:17:14 gmt+0100 (cet) atmosphere: firing onreconnect consolelogger.java:32 atmospherelistener: onreconnect atmosphere.js:3252 sat jan 30 2016 22:17:14 gmt+0100 (cet) atmosphere: firing onreconnect atmosphere.js:3252 invoking executewebsocket, using url: ws://www.example.com:8080/socket/widget/2418c3f0-9a9b-48c4-8ee3-0541465eeacd%7c%7crefdgdfgwe324234%7c%7caf8f7a67-cdd0-4ad3-96c4-d447e970d0f8?x-atmosphere-tracking-id=f89f00d8-b412-4825-80f9-ac8ca280edb5&x-atmosphere-framework=2.3.1-javascript&x-atmosphere-transport=websocket&content-type=application/json; charset=utf-8&x-atmo-protocol=true atmosphere.js:3252 sat jan 30 2016 22:17:14 gmt+0100 (cet) atmosphere: websocket.onopen atmosphere.js:3252 websocket opened atmosphere.js:3252 sat jan 30 2016 22:17:15 gmt+0100 (cet) atmosphere: websocket.onclose atmosphere.js:3252 websocket closed, reason: connection closed abnormally (that is, no close frame being sent). - wasclean: false atmosphere.js:3252 sat jan 30 2016 22:17:15 gmt+0100 (cet) atmosphere: request closed, not firing onclose (closed case) atmosphere.js:3252 sat jan 30 2016 22:17:15 gmt+0100 (cet) atmosphere: request closed, not firing onclose (closed case) atmosphere.js:3252 sat jan 30 2016 22:17:15 gmt+0100 (cet) atmosphere: invoking .close() on websocket object atmosphere.js:3252 websocket reconnect maximum try reached 2 atmosphere.js:3252 websocket error, reason:  atmosphere.js:3252 sat jan 30 2016 22:17:15 gmt+0100 (cet) atmosphere: firing onerror, reasonphrase: maxreconnectonclose reached 

then restarted server. client automatically reconnects because tries init atmosphere connection in onerror. here log get:

atmosphere.js:1195 websocket connection 'ws://www.example.com:8080/socket/widget/2418c3f0-9a9b-48c4-8ee3-0541465eeacd%7c%7crefdgdfgwe324234%7c%7caf8f7a67-cdd0-4ad3-96c4-d447e970d0f8?x-atmosphere-tracking-id=0&x-atmosphere-framework=2.3.1-javascript&x-atmosphere-transport=websocket&content-type=application/json;%20charset=utf-8&x-atmo-protocol=true' failed: error during websocket handshake: unexpected response code: 302 atmosphere.js:3252 sat jan 30 2016 22:22:43 gmt+0100 (cet) atmosphere: websocket.onerror atmosphere.js:3252 sat jan 30 2016 22:22:43 gmt+0100 (cet) atmosphere: websocket.onclose atmosphere.js:3252 websocket closed, reason: connection closed abnormally (that is, no close frame being sent). - wasclean: false atmosphere.js:3252 sat jan 30 2016 22:22:43 gmt+0100 (cet) atmosphere: firing onclose (closed case) consolelogger.java:32 atmospherelistener: onclose atmosphere.js:3252 sat jan 30 2016 22:22:43 gmt+0100 (cet) atmosphere: request closed, not firing onclose (closed case) atmosphere.js:3252 websocket failed on first connection attempt. downgrading long-polling , resending consolelogger.java:32 atmospherelistener: ontransportfailure: websocket failed on first connection attempt. downgrading long-polling , resending consolelogger.java:32 atmospherelistener: ontransportfailure: websocket failed on first connection attempt. downgrading long-polling , resendingmhi_g$ @ consolelogger.java:32hgi_g$ @ simpleconsoleloghandler.java:36cgi_g$ @ logger.java:262bgi_g$ @ logger.java:250ugi_g$ @ logger.java:178tgi_g$ @ logger.java:162agi_g$ @ logger.java:129pni_g$ @ atmospherelistener.java:114(anonymous function) @ atmosphererequestconfig.java:389shc_g$ @ impl.java:239vhc_g$ @ impl.java:291(anonymous function) @ impl.java:77_reconnectwithfallbacktransport @ atmosphere.js:1729_websocket.onclose @ atmosphere.js:1534 atmosphere.js:3252 sat jan 30 2016 22:22:43 gmt+0100 (cet) atmosphere: ajaxrequest.onreadystatechange, new state: 2 2atmosphere.js:3252 sat jan 30 2016 22:22:43 gmt+0100 (cet) atmosphere: ajaxrequest.onreadystatechange, new state: 3 atmosphere.js:2117 xhr finished loading: "http://www.example.com:8080/socket/widget/2418c3f0-9a9b-48c4-8…plication%2fjson%3b%20charset%3dutf-8&x-atmo-protocol=true&_=1454188963647"._executerequest @ atmosphere.js:2117_execute @ atmosphere.js:644_reconnectwithfallbacktransport @ atmosphere.js:1745_websocket.onclose @ atmosphere.js:1534 atmosphere.js:3252 sat jan 30 2016 22:22:43 gmt+0100 (cet) atmosphere: ajaxrequest.onreadystatechange, new state: 4 atmosphere.js:3252 sat jan 30 2016 22:22:43 gmt+0100 (cet) atmosphere: ajaxrequest.onreadystatechange, new state: 2 atmosphere.js:3252 sat jan 30 2016 22:22:43 gmt+0100 (cet) atmosphere: firing onopen 

the log says:

websocket failed on first connection attempt. downgrading long-polling , resending

how force atmosphere.js use preferred transport (websockets) instead of fallback transport (long polling) when server restarted?

how force atmosphere.js use preferred transport (websockets) instead of fallback transport (long polling) when server restarted?

atmosphere client automatically attempts reconnect using fallbacktransport. default behaviour.

to force reconnect using preferred transport might have change default behaviour.

it's possible change commenting out line in atmosphere.js see here.

this ensure preferred web-socket transport used when reconnecting , fallbacktransport not used.

_websocket.onclose = function(websocketopened) { //... if (_abortingconnection) {     atmosphere.util.log(_request.loglevel, ["websocket closed normally"]); /** remove if never want use fallback transport } else if (!websocketopened) {     _reconnectwithfallbacktransport("websocket failed on first connection attempt. downgrading " + _request.fallbacktransport + " , resending"); */ } else if (_request.reconnect && _response.transport === 'websocket' ) {     _clearstate();     if (_requestcount++ < _request.maxreconnectonclose) {         _open('re-connecting', _request.transport, _request);         if (_request.reconnectinterval > 0) {             _request.reconnectid = settimeout(function () {                 _response.responsebody = "";                 _response.messages = [];                 _executewebsocket(true);             }, _request.reconnectinterval);         } else {             _response.responsebody = "";             _response.messages = [];             _executewebsocket(true);         }     } } else {         atmosphere.util.log(_request.loglevel, ["websocket reconnect maximum try reached " + _requestcount]);         if (_canlog('warn')) {             atmosphere.util.warn("websocket error, reason: " + message.reason);         }         _onerror(0, "maxreconnectonclose reached");     } } 

another way make use of onreconnect callback switch clientrequest.request parameters on fly.

why?

because when connection closed , ontransportfailure invoked. atmosphere changes transport fallbacktransport , can end = 'none' (if set websocket).

assuming request includes following config :

  request.reconnectonservererror= true,   request.executecallbackbeforereconnect= true;  

you can add onreconnect callback :

   clientrequest.request.transport = 'websocket'; // force preferred transport on reconnect    //clientrequest.request.fallbacktransport = 'websocket'; // optional 

the problem if set fallback websocket attempt reconnect once if leave blank still use web-socket protocol provided used url( starting ws:// or wss://) , not websocketurl.

request.url = 'ws://example.com/ws';  

Comments

Popular posts from this blog

Hatching array of circles in AutoCAD using c# -

ios - UITEXTFIELD InputView Uipicker not working in swift -

Python Pig Latin Translator -