More a query than anything else.
I am using Jetty-9.2.3 to co-ordinate a bit over a dozen mobile devices on
a local wi-fi network using WebSockets.
I have wrapped the WebSockets in a ReliableSender so that if the client
doesn't acknowledge a message within 500ms the server sends it again until
it times out after 5 retries.
Most of the time it works OK, but I am seeing instances where the server
sends a message to a client, doesn't get an ACK, so resends, and keeps
resending every 500ms (times as recorded by the logging in the code shown
below) until it times out after 2.5 seconds. But looking at the client log
the client receives the first message more than 2.5 seconds after the
server claims to have sent it. And then the client receives all the resends
within the next 50ms. So it appears that the messages may have been batched.
The sends on the server never take more that one milli. This is the code I
am using.
final long currentTime =
System.currentTimeMillis();getRemote().sendString(outboundTextMessage,
new WriteCallback() {
@Override
public void writeFailed(Throwable e) {
log.debug("#sendMessage could not send remote=" +
getRemoteClientDescription() + " message=" + message, e);
}
@Override
public void writeSuccess() {
final long elapsedTime = System.currentTimeMillis() - currentTime;
log.debug((isResend ? "#resendMessage" : "#sendMessage") + "
remote=" + getRemoteClientDescription() + " message=" + message + "
msToSend=" + elapsedTime);
}
});
Could this be because the messages are getting batched by Jetty's WebSocket
implementation?
This would mean that the batching is done AFTER writeSuccess(), correct?
How do I ensure that batching doesn't occur? And what would be the cost of
adopting that approach?
Should I flush after each send?
http://download.eclipse.org/jetty/stable-9/apidocs/org/eclipse/jetty/websocket/common/WebSocketRemoteEndpoint.html#flush()
Or should I configure the RemoteEndPoint#setBatchMode(BatchMode.OFF)?
http://download.eclipse.org/jetty/stable-9/apidocs/org/eclipse/jetty/websocket/common/WebSocketRemoteEndpoint.html#setBatchMode(org.eclipse.jetty.websocket.api.BatchMode)
William
ᐧ
_______________________________________________
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