Мы используем веб-сокеты для подключения к устройствам. Я пишу клиент websocket на C # и подключаюсь к большому количеству устройств (более 100) через медленные сети. Устройства реализуют сервер веб-сокетов.
Моя клиентская программа подключится к устройству, авторизуется и затем запросит некоторые данные с устройства - ответ может быть несколько сотен мегабайт. А поскольку устройства находятся в медленных сетях, это может занять несколько минут.
Ответ должен быть сохранен на диск для последующей обработки. И мне нужно передать это, чтобы у меня не хватило памяти, так как
Скорее всего, загрузка выполняется с нескольких устройств одновременно.
Проблема в том, что все найденные мною клиентские библиотеки websocket перезванивают вам только после получения всего сообщения. Например, в websocket-sharp вы пишете
ws.OnMessage += (sender, e) => {
... do something with e.RawData
};
Другие клиентские библиотеки выглядят одинаково.
Но в моем случае e.RawData будет стоить более 100 Мб. И, возможно, я получаю 10 из них одновременно, поэтому я должен записать данные на диск по мере их поступления, не ожидая полного сообщения.
Должен ли я написать собственную реализацию клиента websocket или есть другие варианты? Изменение протокола для отправки данных несколькими небольшими порциями не вариант.