Если обмен, который предоставляет данные, имеет некоторый уникальный идентификатор для данных, который он предоставляет, реализация довольно проста, но не тривиальна.
По сути, у вас есть приложение, которое подписывается на два канала. (Вы можете сделать это с помощью программного обеспечения, основанного на сниффе, а также для неинтрузивного мониторинга / измерения - я могу попытаться решить и это)
Вы должны хранить два списка (или любой другой способ отметить «несопоставленные» выборки из каждого канала) несопоставленных данных / обновлений. По мере поступления каждого обновления вы ищите соответствующий элемент в другом списке в другом фиде данных. После успешного совпадения вы можете сохранить это соединение. Когда приходит каждое обновление, вы должны как-то назначить ему «метку времени» - скорее всего, время локальной машины. Поскольку происхождение в этом простом случае совпадает с обменом, определить относительную задержку довольно просто.
Этот метод требует написания подписывающихся приложений для данных.
Существует множество проблем, таких как обработка пропущенных обновлений и тайм-аут непревзойденных данных, как работать с биржами или фидами, которые могут не предоставлять уникальные идентификаторы для обновлений, работать с ошибками поставщиков данных, локальным WRT и временем UTC и т. Д.
Анализ данных аналогичен, но вы собираете данные с помощью pcap или аппаратных карт захвата, а затем анализируете потоки на основе конечных точек пакетов. Это немного сложнее, чем прямая подписка, но имеет преимущество в том, что она не навязчива и достаточно гибка в отношении того, какие наборы данных вы можете измерять.