Don't forget to also handle javax.websocket @OnError http://docs.oracle.com/javaee/7/api/javax/websocket/OnError.html
-- Joakim Erdfelt <[email protected]> webtide.com <http://www.webtide.com/> - intalio.com/jetty Expert advice, services and support from from the Jetty & CometD experts eclipse.org/jetty - cometd.org On Tue, Jul 29, 2014 at 11:11 AM, Manoj Khangaonkar < [email protected]> wrote: > Hi, > > So it is appears not worthwhile for the application layer to try to use > ping/pong. > > SetMaxIdleTimeout can be used to keep connections alive for the > specified time. > > But connections can get closed for other reasons like loss of network > connection. It appears that the best strategy for both > The server and the client is to be aware of connection close ( OnClose > called by jetty) and handle it gracefully. In the > Case of the client , the client can reconnect when required. In the case > of the server , it has to discard the current connection > And wait for the client to connect again. > > If the connection fails while the server is trying to write to the > client, I assume an IOException or some Exception will be thrown, > The server can reattempt the write when the client makes a connection the > next time. > > If there are other better ways to do connection management, please let > me know. > > regards > > From: Joakim Erdfelt <[email protected]> > Reply-To: JETTY user mailing list <[email protected]> > Date: Monday, July 28, 2014 at 5:51 PM > To: JETTY user mailing list <[email protected]> > Subject: Re: [jetty-users] Jetty 9 websocket ping/pong messages > > PING / PONG on websocket is considered a back-channel. A form of > health check. > Its supposed to be automatically responded to (similar to ICMP echo, SPDY > ping, HTTP/2 ping, etc...). > > Many implementations do not support sending a pong. > This is because sending a pong with a different payload (something that > becomes possible when you expose .sendPong()) is often interpreted as a > failed PING/PONG pair. > > The jetty exposure is because of JSR-356, aka javax.websocket. (This > API has many small issues. the next iteration will hopefully soften the > numerous papercuts present) > Know this, Jetty will *ALWAYS* respond to a PING it receives with a PONG > of the same payload (as soon as it has parsed the PING, it shoves the PONG > at the front of the frame queue for outgoing reply) > Therefore, using javax.websocket.RemoteEndpoint.sendPong() will result in > a naked pong for a unsent ping. > > The PING/PONG is also out-of-band, meaning it can exist in the middle of > other messages. > Since the APIs for notifications are supposed to be thread-safe, this out > of band behavior of websocket control messages means that if you were > handling a large message, consisting of many websocket frames (fragments), > we couldn't notify you of the PING or PONG until your endpoint is done > handling the message. (this is especially true of Decoded or Stream based > message handling). > > As for keeping a connection alive, that's a facility of idle timeout. > If you want to track latency, send a PING with a sequence indicator + > timestamp. in your onPong, compare the sequence indicator (if desired), > and the timestamp for latency. Also know that the latency you see here can > be skewed by a large frame. (if a frame is in progress, nothing else can be > sent until that frame is completed). > If you want to discover network issues faster (such as a mobile device > going out of coverage), then use a PING/PONG, the result will be a > non-response, or have ridiculous latency, or even cause an IO error with an > abnormal close. > > > -- > Joakim Erdfelt <[email protected]> > webtide.com <http://www.webtide.com/> - intalio.com/jetty > Expert advice, services and support from from the Jetty & CometD experts > eclipse.org/jetty - cometd.org > > > On Mon, Jul 28, 2014 at 4:31 PM, Manoj Khangaonkar < > [email protected]> wrote: > >> Hi, >> >> RemoteEndPoint class has sendPing and sendPong methods. >> >> If the server or client sends a ping, how is the other end expected to >> handle the message and send a pong. In other words , >> Which method gets called on receipt of a ping. >> >> If you have used WebSocketListener or WebSocketAdapter, is it the >> OnWebSocketBinary method that gets called ? >> >> If you have the @WebSocket annotation, Will it be the method annotated >> with @WebSocketFrame or the one annotated with @WebSocketMessage. >> >> Since clients could use other APIs or languages that do not expose >> ping/pong, is there a recommendation on the best way to do a >> Heartbeat to keep connections alive. >> >> regards >> This e-mail and any attached files are intended solely for the use of the >> individual or entity to which this mail is addressed and may contain >> information that is privileged, confidential and exempt from disclosure >> under applicable law. Any use, disclosure, copying or distribution of this >> e-mail or the attached files by anyone other than the intended recipient is >> strictly prohibited. If you have received this e-mail in error, please >> notify the sender by reply e-mail or collect call to (650) 388-4111 and >> delete this e-mail and attached files from your system. Thank you. >> >> _______________________________________________ >> jetty-users mailing list >> [email protected] >> To change your delivery options, retrieve your password, or unsubscribe >> from this list, visit >> https://dev.eclipse.org/mailman/listinfo/jetty-users >> > > This e-mail and any attached files are intended solely for the use of > the individual or entity to which this mail is addressed and may contain > information that is privileged, confidential and exempt from disclosure > under applicable law. Any use, disclosure, copying or distribution of this > e-mail or the attached files by anyone other than the intended recipient is > strictly prohibited. If you have received this e-mail in error, please > notify the sender by reply e-mail or collect call to (650) 388-4111 and > delete this e-mail and attached files from your system. Thank you. > > _______________________________________________ > jetty-users mailing list > [email protected] > To change your delivery options, retrieve your password, or unsubscribe > from this list, visit > https://dev.eclipse.org/mailman/listinfo/jetty-users >
_______________________________________________ jetty-users mailing list [email protected] To change your delivery options, retrieve your password, or unsubscribe from this list, visit https://dev.eclipse.org/mailman/listinfo/jetty-users
