gRPC: запуск и эксплуатация облачных приложений. Go и Java для Docker и Kubernetes [Индрасири Касун] (pdf) читать постранично, страница - 24
Книга в формате pdf! Изображения и текст могут не отображаться!
[Настройки текста] [Cбросить фильтры]
потока сервер закрывает этот поток со своей стороны, возвращая nil.
Клиентская реализация (листинг 3.12) тоже имеет много общего с предыдущими примерами. При вызове метода processOrders из объекта OrderMana
gement клиент получает ссылку на поток (streamProcOrder ), с помощью
которой он отправляет свои сообщения и читает ответы, возвращаемые
сервером.
Листинг 3.12. Реализация клиента OrderManagement
с методом processOrders на Go
// обработка заказов
streamProcOrder, _ := c.ProcessOrders(ctx)
if err := streamProcOrder.Send(
&wrapper.StringValue{Value:"102"}); err != nil {
log.Fatalf("%v.Send(%v) = %v", client, "102", err)
}
if err := streamProcOrder.Send(
&wrapper.StringValue{Value:"103"}); err != nil {
log.Fatalf("%v.Send(%v) = %v", client, "103", err)
}
if err := streamProcOrder.Send(
&wrapper.StringValue{Value:"104"}); err != nil {
log.Fatalf("%v.Send(%v) = %v", client, "104", err)
}
channel := make(chan struct{})
go asncClientBidirectionalRPC(streamProcOrder, channel)
time.Sleep(time.Millisecond * 1000)
Двунаправленный потоковый RPC 79
if err := streamProcOrder.Send(
&wrapper.StringValue{Value:"101"}); err != nil {
log.Fatalf("%v.Send(%v) = %v", client, "101", err)
}
if err := streamProcOrder.CloseSend(); err != nil {
log.Fatal(err)
}
Последние комментарии
2 часов 57 минут назад
1 день 14 часов назад
1 день 22 часов назад
2 дней 13 часов назад
2 дней 17 часов назад
2 дней 17 часов назад