After having implemented differential and full_dataset for alerts, vehiclepositions and stoptimeupdates, we want to get back to were we were actually developing for: realtime distribution of transit information.
From a certain source we have heard that for a standardisation effort websockets would be prefered other message queing systems;
Method 0) Legacy client would connect to GTFS-RT aware webserver
- webserver serves cached full_dataset
Method 1) each client can trigger rendering full_dataset
- webserver serves full_dataset
- webserver sends differential updates
Method 2) a client has to wait for the next full_dataset to have a guaranteed replicated state, prior to receiving differential updates
- webserver serves full_dataset (cached)
- webserver serves full_dataset (new)
- webserver sends differential updates
In all cases, if a client gets out of sync with differential updates, it could force itself to restart the connection. Which results into the full_dataset again.
Any thoughts on the above?
Stefan
Fair enough, though since ZMQ is totally open source I’m a little reluctant to use the word “vendor” (not that there isn’t a company behind it…).
But I’m all for standards (and easy solutions to dealing with firewalls). For the ZMQ-obsessives among us, it’s probably not too hard to bridge from that to WebSockets (and vice versa).
Thanks,
Mike
Give Pieter some credit business please!! But I see what Brian means, because the next cool thing would be called nanomsg, etc.
> But I’m all for standards (and easy solutions to dealing with
> firewalls). For the ZMQ-obsessives among us, it’s probably not
> too hard to bridge from that to WebSockets (and vice versa).
We will support all flavors :) HTTP/ZeroMQ/WebSockets
I just heard that OpenTripPlanner does HTTP/ZeroMQ and as you mention going to WebSockets is a triviality.
But I really want to get this ball rolling. Currently we put a lot of effort in pushing the development of OpenTripPlanner as consumer of data. It would be a really good gesture from other vendors to step in and commit to support as producer or consumer with a reasonable deadlines.
Stefan
Stefan
--
You received this message because you are subscribed to the Google Groups "GTFS-realtime" group.
To unsubscribe from this group and stop receiving emails from it, send an email to gtfs-realtime+unsubscribe@googlegroups.com.
On Thursday, June 6, 2013 3:56:25 PM CEST, Brian Ferris wrote:
> First, I'd propose adding a "incremental_index" field to
> FeedHeader. For an incremental feed, the field represents the
> index of the current incremental FeedMessage. Each incremental
> FeedMessage sent to a client should sequentially increment the
> index, such that a client can detect missed messages by looking
> for gaps in the index value. It is not required that the index
> of the first message sent to a client be zero.
Great idea, also combined with full_dataset as 'starting point'.
> I've got some more thoughts, but I figured I'd toss this out first.
>
> Second, could you give a bit more explanation of Method 2 in
> your list? I'm not 100% certain I understand what's going on
> there.
I'll elaborate. Currently we have a producer that takes about 1.6s to render all the active messages (about 3k) to a file - previously it took us 3 minutes to do the same, but then all stops were populated with predictions. A lot of clients could bring the system to it knees by doing a deny of service attack. Since the rendering to protobuf actually locks the processing which is bad.
If at certain times a full_dataset is made the client could start off from the 'last run'. Especially for alerts etc. this will be all fine. Because the client already missed some differential messages the state cannot be guaranteed. (To detect this your incremental_index would help.) At a certain moment in time (for example every minute) a cached full_dataset update will be made. From this point on, a newly connected client has guaranteed coverage of every next message.
Visually:
client1 index - client2 index
F1 1 -
D 2 -
D 3 - F1 1
D 4 - D 4
D 5 - D 5
D 6 - D 6
D 7 - F2 7
D 8 - D 8
Method 2 would state that Differential message 4-6 would not be send to the client. Reviewing it we could just send it, but still maintain that the client stepped in after the first differential was send out.
Stefan
Going to blaim the Google Group then.
<http://img812.imageshack.us/img812/6699/visuallypng>
Stefan
http://img812.imageshack.us/img812/6699/visually.png
--
Met vriendelijke groet,
Stefan de Konink