Имам данни, изтеглени от Reactive Mongo, които трябва да прокарам през API на Spray Rest. Надявах се да направя това с Chunked Responses. Въпреки това открих, че Enumerator, който се връща от Reactive Mongo, е в състояние да премине през Spray по-бързо, отколкото може да се справи с мрежовата връзка. Резултатът е, че връзката е прекратена.
Успях да разреша този проблем с помощта на функцията Spray Ack в междинен актьор. Това заедно с Blocking Await ми позволи да създам обратен натиск върху Enumerator. Аз обаче не искам наистина Await. Бих искал да разбера начин за поточно предаване на данните през Spray по неблокиращ начин.
Възможно ли е това? Имам няколко идеи, които биха могли да проработят, ако мога да попълня липсващите части.
1) Създайте обратен натиск върху Enumerator по неблокиращ начин (нямате идея как да направите това. Предложения?)
2) Разделете изброителя на по-малки изброители. Започнете да консумирате всеки изброител само след като предишният е завършен. Мога да направя това с помощта на актьор. Това, което ми липсва тук, е начин да разделя по-големия изброител на по-малки изброители.
3) Използвайте нещо като метода "Enumeratee.take". Където бих взел известен брой записи от Преброителя, след което, когато съм готов, ще взема още. Това наистина е същото решение като 2), но от малко по-различна гледна точка. Това обаче ще изисква преброителят да поддържа състояние. Има ли начин да използвате Enumeratee.take няколко пъти срещу един и същи изброител, без да рестартирате отначало всеки път?
Може ли някой да предложи някакви алтернативни предложения, които биха могли да работят? Или ако не е възможно, моля, уведомете ме.
Използвам Play Enumerators 2.3.5