sony / nmos-cpp

An NMOS (Networked Media Open Specifications) Registry and Node in C++ (IS-04, IS-05)
Apache License 2.0
142 stars 80 forks source link

Events Receivers - don't stay connected #96

Open jwpwh opened 5 years ago

jwpwh commented 5 years ago

Running on Windows.

When the nodes come back, the data sender is green, but the data receiver is not. (usually) For the video sender/receiver pair, the video receiver usually comes back green.

Is there something missing for the data receivers that the connection info is not maintained as it is with the video sender/receiver pair?

garethsb commented 5 years ago

I suspect this is a known spec, or QoI issue for connection-oriented protocols with IS-05, as opposed to connection-less ones like RTP. Basically the spec says that it's up to the implementation how many times to retry when a connection breaks before signalling that it's broken via master_enable / subscription.active.

The relevant passage of the IS-05 spec is here: https://github.com/AMWA-TV/nmos-device-connection-management/blob/v1.1.x/docs/4.0.%20Behaviour.md#connection-status

On the implementation side see here: https://github.com/sony/nmos-cpp/blob/8b8b269ff9e5d33d8e1b27ec2dec82e84f813b11/Development/nmos/connection_events_activation.cpp#L134-L138

Opinions/contributions on improvements to how this is handled are welcome!

jwpwh commented 5 years ago

Many of the embedded systems I have worked on have clients retry forever to reestablish a connection to their server. An error message can be logged but the device is not going anywhere and just continually tries to reconnect. We typically try once a second. The devices might have at most a dozen or so connections.

This might not be appropriate in all cases but it seems like it should be a possibility.

garethsb commented 5 years ago

Agreed.

Retry probably ought to be configured with similar min/max/backoff-factor properties as DNS-SD (plus whether to ever give up completely).

I heard another data point of IS-07 panels with upwards of 500 Senders/Receivers.

jwpwh commented 5 years ago

The IS-07 events will add a lot more connections. (would MQTT reduce this?)

Our worst case would probably be a single physical device with about 100 signals where each signal has one audio receiver, 4 event senders, and 5 event receivers. I am not sure that all would be exposed via NMOS at the same time but they could be.

garethsb commented 5 years ago

(would MQTT reduce this?)

It depends on connection patterns.

IS-07 recommends a WebSocket server endpoint per Device or per Node rather than per Sender, which means that making a lot of connections from one Node's IS-07 Receivers to another Node's IS-07 Senders can be achieved with a single WebSocket connection.

If a Node has Receivers which are to be connected to Senders of many different Nodes, then MQTT would result in fewer connections overall.