org.cometd.bayeux.server.BayeuxServer.Extensionpublic class TimesyncExtension
extends java.lang.Object
implements org.cometd.bayeux.server.BayeuxServer.Extension
With each handshake or connect, the extension sends timestamps within the ext
field like:
{ext:{timesync:{tc:12345567890,l:23,o:4567},...},...} where:
A cometd server that supports timesync, can respond with an ext field like:
{ext:{timesync:{tc:12345567890,ts:1234567900,p:123,a:3},...},...}
where:
The relationship between tc, ts, o and l on the server is given by
ts=tc+o+l (the time the server received the message is the
client time plus the offset plus the network lag). Thus the accuracy of the o
and l settings can be determined with a=tc+o+l-ts.
When the client has received the response, it can make a more accurate
estimate of the lag as l2=(now-tc-p)/2 (assuming symmetric lag).
A new offset can then be calculated with the relationship on the client that
ts=tc+o2+l2, thus o2=ts-tc-l2.
Since the client also receives the a value calculated on the server, it should be possible to analyse this and compensate for some asymmetry in the lag. But the current client does not do this.
| Modifier and Type | Field | Description |
|---|---|---|
static java.lang.String |
LAG_ATTRIBUTE |
| Constructor | Description |
|---|---|
TimesyncExtension() |
| Modifier and Type | Method | Description |
|---|---|---|
int |
getAccuracyTarget() |
timesync responses are not set if the measured accuracy is less than the
accuracyTarget.
|
boolean |
rcvMeta(org.cometd.bayeux.server.ServerSession from,
org.cometd.bayeux.server.ServerMessage.Mutable message) |
|
boolean |
sendMeta(org.cometd.bayeux.server.ServerSession session,
org.cometd.bayeux.server.ServerMessage.Mutable message) |
|
void |
setAccuracyTarget(int target) |
timesync responses are not set if the measured accuracy is less than the
accuracyTarget.
|
public static final java.lang.String LAG_ATTRIBUTE
public int getAccuracyTarget()
public void setAccuracyTarget(int target)
target - accuracy target in mspublic boolean rcvMeta(org.cometd.bayeux.server.ServerSession from,
org.cometd.bayeux.server.ServerMessage.Mutable message)
rcvMeta in interface org.cometd.bayeux.server.BayeuxServer.Extensionpublic boolean sendMeta(org.cometd.bayeux.server.ServerSession session,
org.cometd.bayeux.server.ServerMessage.Mutable message)
sendMeta in interface org.cometd.bayeux.server.BayeuxServer.ExtensionCopyright © 2008–2017 The CometD Project. All rights reserved.