Клиентские обратные вызовы с protobuf- net .Grpc - PullRequest
1 голос
/ 26 февраля 2020

В настоящее время я работаю над заменой старого соединения клиент / сервер WCF на gRp c и решил использовать protobuf- net .Grp c, поскольку мы широко использовали protobuf- net в других местах в наша кодовая база. Однако у меня возникли некоторые проблемы с одной конкретной частью.

Часть оригинальной службы - это метод Subscribe, который использует IClientCallback для эффективной отправки события клиенту. Глядя на обычную gRp c, кажется, что это было бы возможно (хотя и немного странно) с использованием метода потоковой передачи на сервере и сохранения объекта IServerStreamWriter на сервере и записи в него всякий раз, когда мы хотели «запустить событие».

Однако я не могу понять, как сделать нечто подобное в protobuf- net .Grp c с возвращаемым типом IAsyncEnumerable. Самое близкое, что я могу понять, - это использовать Task.Wait в al oop и обновлять некоторую общую коллекцию, когда я хочу «запустить» событие, которое l oop затем проверит и выдаст возврат. Однако это не похоже на то, что оно будет хорошо масштабироваться, и на самом деле не существует отличного способа отменить подписку, когда клиент больше не слушает события.

Есть ли другой / лучший способ сделать это?

1 Ответ

1 голос
/ 27 февраля 2020

Channel<T>, который можно настроить с помощью AsAsyncEnumerable() - который затем по существу действует как очередь на стороне производителя и последовательность на потребителе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...