С какой скоростью можно слать команды?

Mini web-сервер для печати чеков на фискальных регистраторах из мобильных приложений через HTTP запрос JSON.
Ответить
pleomaxtor
Сообщения: 11
Зарегистрирован: 30 ноя 2018, 09:19

С какой скоростью можно слать команды?

Сообщение pleomaxtor » 03 дек 2018, 13:29

Например у нас скопилось 100 чеков, и мы все их отправляем на kkmserver по порядку. Ведь каждый раз будет открываться и закрываться соединение.
С какой скоростью можно слать команды? Асинхронно будет отправлять. Timeout: 1

И можно ли как то отправить 100 команд на сервер за одно соединение?

Audim
Администратор
Сообщения: 2395
Зарегистрирован: 17 мар 2015, 18:36

Re: С какой скоростью можно слать команды?

Сообщение Audim » 03 дек 2018, 14:43

Все команды ставятся в очередь на выполнение и выполняются по порядку.
Если Вам нужно заслать сразу много команд то нужно:
1. изменить в настройках сервера параметр "Интервал ожидания команды в очереди (сек)"
Этот параметр определяет время, в течении которого команда будет дожидаться постановки на исполнение из очереди.
2. Нужно применять "Асинхронный" способ работы: в команде ставите параметр "Timeout: 1" - т.е. ответ возвратится сразу (статус выполнения - ожидение в очереди)
и командой "GetRezult" переодически проверяете статусы ранее отданных команд.

>Ведь каждый раз будет открываться и закрываться соединение.
По НТТP протоколу - каждая передача в своем соединении. Но на этот счет можно не беспокоится - это менее 1% всех временных затрат на постановку команды в очередь.

pleomaxtor
Сообщения: 11
Зарегистрирован: 30 ноя 2018, 09:19

Re: С какой скоростью можно слать команды?

Сообщение pleomaxtor » 04 дек 2018, 09:40

По идее должна быть возможность заслать команды в массиве, однако сейчас такой возможности видимо нет, а надо бы, чтобы за одно соединение заслать сразу массив команд.

Например на простой запрос:
[
{"Command":"GetRezult","IdCommand":"5c05f47e3b599"},
{"Command":"GetRezult","IdCommand":"5c05f44197bd9"}
]

Получаем:
[Error] => Ошибка разбора (парсинга) команды: Message: Cannot deserialize the current JSON array (e.g. [1,2,3]) into type 'KkmFactory.Unit+DataCommand' because the type requires a JSON object (e.g. {"name":"value"}) to deserialize correctly.
To fix this error either change the JSON to a JSON object (e.g. {"name":"value"}) or change the deserialized type to an array or a type that implements a collection interface (e.g. ICollection, IList) like List<T> that can be deserialized from a JSON array. JsonArrayAttribute can also be added to the type to force it to deserialize from a JSON array.

Хотя по логике вещей сервер должен уметь распознавать единичную команду или массив команд. Это было бы круто. Спасибо.

Audim
Администратор
Сообщения: 2395
Зарегистрирован: 17 мар 2015, 18:36

Re: С какой скоростью можно слать команды?

Сообщение Audim » 04 дек 2018, 13:25

А возвращать как ответы?
А ведь разные команды могут выполнятся разное время.
Или на одни команды ответ идет сразу а на другие с задержкой...
И так как по HTTP протоколу возможны "не асинхронные" вызовы то так сделать не получится.

Но Вы можете параллельно (в несколько потоков) ставить команды на выполнение - поверьте - разница по времени не будет сильно различаться.

То что вы говорите сделано в "Обратном вызове"
Там сразу предполагается что команды только "Асинхронно" и соответственно команды подаются массивами команд и ответы приходят массивами ответов.

Ответить