Как обнаружить, когда Буферное сообщение Протокола полностью получено?

Попробуйте изменить оператор возврата на функцию update_output. Таким образом, это должно выглядеть следующим образом:

@app.callback(
# If you stuck to what those values belongs to,
# you can specify them more in details:
# Output(component_id='your_plot_here', component_property='children'),
# instead of:
Output('your_plot_here', 'children'),
[Input('sport_dropdown', 'value')])

def update_output(selected_sport):
   sport = df[df.Sport == selected_sport]
   rank = sport['Rank']
   age = sport['Age']
   return figure = {'data': #stuff
                 'layout':#stuff
                }

Только добавьте число dict, потому что это единственное значение, которое обновляется.

Извините, если форматирование выглядит странно, это мой первый ответ StackOverflow:)

6
задан Community 23 May 2017 в 12:20
поделиться

4 ответа

Необходимо включать размер или маркер конца в протоколе. Ничто не встроено в сокеты на основе потоков (TCP/IP) кроме поддержки неопределенного потока октетов, произвольно разбитых в отдельные пакеты (и пакеты могут быть пролиты в пути также).

Простой подход состоял бы в том, чтобы каждое "сообщение" имело заголовок фиксированного размера, включайте и версию протокола и размер полезной нагрузки и любые другие фиксированные данные. Затем содержимое сообщения (полезная нагрузка).

Дополнительно нижний колонтитул сообщения (фиксированный размер) мог быть добавлен с контрольной суммой или даже криптографической подписью (в зависимости от Вашей надежности/требований к защите).

Знание размера полезной нагрузки позволяет Вам продолжать читать многие байты, которые будут достаточно для остальной части сообщения (и если чтение завершается с меньше, делая другое чтение для остающихся байтов, пока целое сообщение не было получено).

Наличие индикатора сообщений конца также работает, но необходимо определить, как обработать сообщение, содержащее ту же самую последовательность октета...

15
ответ дан 8 December 2019 в 04:31
поделиться

Извинения за прибытие поздно на вечеринке. Я - автор protobuf-сети, одна из реализаций C#. Для использования сети необходимо считать" [De]SerializeWithLengthPrefix" методами - тот путь, это автоматически обработает длины для Вас. В источнике существуют примеры.

Я не буду вдаваться в огромные подробности о старом сообщении, но если Вы хотите знать больше, добавьте комментарий, и я возвращусь к Вам.

6
ответ дан 8 December 2019 в 04:31
поделиться

Я соглашаюсь с Matt, что заголовок лучше, чем нижний колонтитул для Буферов Протокола по основной причине, что, поскольку ПБ является протоколом двоичной синхронной передачи данных, это проблематично для предложения нижнего колонтитула, который также не был бы допустимой последовательностью сообщений. Много находящихся на нижнем колонтитуле протоколов (обычно EOL) работает, потому что содержимое сообщения находится в определенном диапазоне (обычно 0x20 - 0x7F ASCII).

Полезный подход должен иметь Ваш самый низкий код уровня, просто прочитывает буферы сокета и представляют их до слоя структурирования, который собирает полные сообщения и помнит частичные (я представляю асинхронный подход к этому (использование CCR) здесь, хотя для протокола линии связи).

Для непротиворечивости Вы могли всегда определять свое сообщение как сообщение ПБ с тремя полями: фиксированный интервал как длина, перечисление как тип и последовательность байта, которая содержит фактические данные. Это сохраняет Ваш весь сетевой протокол прозрачным.

3
ответ дан 8 December 2019 в 04:31
поделиться

TCP/IP, а также UDP, пакеты включают некоторую ссылку на свой размер. Заголовок IP содержит 16-разрядное поле, которое указывает продолжительность заголовка IP и данных в байтах. Заголовок TCP содержит 4-разрядное поле, которое указывает размер заголовка TCP в 32-разрядных словах. Заголовок UDP содержит 16-разрядное поле, которое указывает продолжительность заголовка UDP и данных в байтах.

Вот вещь.

Используя стандартные заурядные сокеты в Windows, используете ли Вы Систему. Сеть. Пространство имен сокетов в C# или собственном Winsock наполняет в Win32, Вы никогда не видите заголовки IP/TCP/UDP. Эти заголовки являются неизолированными так, чтобы то, что Вы получаете, когда Вы читаете сокет, было фактической полезной нагрузкой, т.е. данными, которые были отправлены.

Типичный шаблон от всего я когда-либо видел и делал сокеты использования, то, что Вы определяете заголовок прикладного уровня, который предшествует данным, которые Вы хотите отправить. Как минимум этот заголовок должен включать размер данных для следования. Это позволит Вам читать каждое "сообщение" в целом, не имея необходимость предполагать относительно его размера. Можно стать столь необычными, как Вы хотите с ним, например, синхронизируете шаблоны, CRCs, версию, тип сообщения, и т.д., но размер "сообщения" - все, в чем Вы действительно нуждаетесь.

И если это имеет значение, я предложил бы использовать заголовок вместо разделителя конца пакета. Я не уверен, существует ли signficant недостаток к разделителю EOP, но заголовок является подходом, используемым большинством протоколов IP, которые я видел. Кроме того, это просто кажется более интуитивным мне, чтобы обработать сообщение с начала, а не ожидать некоторого шаблона, чтобы казаться, в моем потоке указать, что мое сообщение завершено.

Править: Я только что узнал проект Google Protocol Buffers. Из того, что я могу сказать, это - двоичный файл serialization/de-serialization схема WCF (я уверен, что это - грубое упрощение). При использовании WCF Вы не должны волноваться о размере сообщений, отправляемых, потому что инфраструктура WCF заботится об этом негласно, которое является, вероятно, почему Вы ничто не нашли связанным с длиной сообщения в Буферной документации Протокола. Однако в случае сокетов, зная размер выручит чрезвычайно, как обсуждено выше. Мое предположение - то, что Вы будете сериализировать свои данные с помощью Буферов Протокола и затем лавировать на любом заголовке приложения, который Вы придумываете прежде, чем отправить их. На получить стороне Вы осуществите заголовок и затем десериализуете остаток от сообщения.

1
ответ дан 8 December 2019 в 04:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: