Мы работаем над одним проектом, который требует большого объема обмена сообщениями/командами между устройствами.
Мы используем роль Cloud Service Worker для обработки команд и отправки на соответствующие устройства с помощью метода Cloud to Device Direct.
Конфигурация рабочей роли — ядро A2V2-2 с 4 ГБ ОЗУ. Проблем с емкостью рабочей роли нет. ЦП и память полностью под контролем.
Для меньшего количества сообщений / команд, обрабатывающих его, он работает нормально (например, 500 сообщений). Но когда количество сообщений увеличивается, мы сталкиваемся с проблемой производительности (например, 1000 сообщений). Мы нацеливаемся на задержку ‹ 5 секунд. Когда мы пытаемся войти в рабочую роль VM и обнаружил, что число TCP-соединений продолжает увеличиваться, что вызывает замедление при отправке сообщений/команд на устройства.
Следующая строка кода, которую мы используем для отправки сообщений с использованием прямого метода. Ищем лучший способ избавиться от объекта клиента службы после каждого прямого вызова метода.
var methodInvocation = new CloudToDeviceMethod(methodInfo.MethodName) { ResponseTimeout = TimeSpan.FromSeconds(methodInfo.ResponseTimeout) };
//set the payload
methodInvocation.SetPayloadJson(methodInfo.Payload);
//invokes direct method
var response = _serviceClient.InvokeDeviceMethodAsync(methodInfo.DeviceId, methodInvocation);
if (_serviceClient != null)
{
//closes the service client connection
_serviceClient.CloseAsync();
_serviceClient.Dispose();
}