带你读《Apache Dubbo微服务开发从入门到精通》——二、 HTTP/2(Triple)协议(9)

本文涉及的产品
Serverless 应用引擎 SAE,800核*时 1600GiB*时
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
简介: 带你读《Apache Dubbo微服务开发从入门到精通》——二、 HTTP/2(Triple)协议(9)

《Apache Dubbo微服务开发从入门到精通》——通信协议——二、 HTTP/2(Triple)协议(8) https://developer.aliyun.com/article/1224937



3) 非Protobuf序列化的流

 

a) API

 

image.png

 

注:

Stream方法的方法入参和返回值是严格约定的,为防止写错而导致问题,Dubbo3框架侧做了对参数的检查, 如果出错则会抛出异常。

 

对于双向流BIDIRECTIONAL_STREAM),需要注意参数中的StreamObserver是响应流,返回参数中的StreamObserver为请求流。

 

b) 实现类


public class WrapGreeterImpl implements WrapGreeter {
    //...
    @Override
    public StreamObserver<String> sayHelloStream(StreamObserver<String> response) {
        return new StreamObserver<String>() {
            @Override
            public void onNext(String data) {
                System.out.println(data);
                response.onNext("hello,"+data);
            }
            @Override
            public void onError(Throwable throwable) {
                throwable.printStackTrace();
            }
            @Override
            public void onCompleted() {
                System.out.println("onCompleted");
                response.onCompleted();
            }
        };
    }
    @Override
    public void sayHelloServerStream(String request, StreamObserver<String> response) {
        for (int i = 0; i < 10; i++) {
            response.onNext("hello," + request);
        }
        response.onCompleted();
    }
}

 

c) 调用方式

 

delegate.sayHelloServerStream("server stream", new StreamObserver<String>() {
    @Override
    public void onNext(String data) {
        System.out.println(data);
    }
    @Override
    public void onError(Throwable throwable) {
        throwable.printStackTrace();
    }
    @Override
    public void onCompleted() {
        System.out.println("onCompleted");
    }
});
StreamObserver<String> request = delegate.sayHelloStream(new StreamObserver<String>() {
    @Override
    public void onNext(String data) {
        System.out.println(data);
    }
    @Override
    public void onError(Throwable throwable) {
        throwable.printStackTrace();
    }
    @Override
    public void onCompleted() {
        System.out.println("onCompleted");
    }
});
for (int i = 0; i < n; i++) {
    request.onNext("stream request" + i);
}
request.onCompleted();



相关文章
|
10天前
|
XML API 网络安全
【安卓】在安卓中使用HTTP协议的最佳实践
【安卓】在安卓中使用HTTP协议的最佳实践
27 4
|
23天前
|
程序员 API 开发者
Socket与HTTP协议的实践
【6月更文挑战第4天】本文介绍了Python中的网络编程,包括Socket编程和基于HTTP协议的实践。Socket编程是网络通信的基础,Python的`socket`模块简化了其使用。文中展示了服务器和客户端的简单示例,以及如何通过多线程处理多个客户端连接。另外,文章讨论了HTTP协议,推荐了`requests`库,并给出了发送GET和POST请求的例子。最后,总结了Socket编程和HTTP协议在网络编程中的应用及其在Web开发和API交互中的重要性。
21 5
|
23天前
|
安全 前端开发 中间件
中间件中HTTP/HTTPS 协议
【6月更文挑战第3天】
18 3
|
21小时前
|
安全 网络协议 网络安全
IP代理的三大协议:HTTP、HTTPS与SOCKS5的区别
**HTTP代理**适用于基本网页浏览,简单但不安全;**HTTPS代理**提供加密,适合保护隐私;**SOCKS5代理**灵活强大,支持TCP/UDP及认证,适用于绕过限制。选择代理协议应考虑安全、效率及匿名需求。
|
22小时前
|
缓存 开发框架 网络协议
必知的技术知识:HTTP协议和SOCKS5协议
必知的技术知识:HTTP协议和SOCKS5协议
|
1天前
|
移动开发 缓存 网络协议
Beetlex实现完整的HTTP协议
Beetlex实现完整的HTTP协议
|
2天前
|
Web App开发 缓存 安全
HTTP协议 -JavaWeb基础必知
HTTP协议 -JavaWeb基础必知
13 0
|
7天前
|
机器学习/深度学习 前端开发 JavaScript
【计算机网络】深度学习使用应用层的HTTP协议
【计算机网络】深度学习使用应用层的HTTP协议
30 0
|
7天前
|
缓存 网络协议 应用服务中间件
深入理解 web 协议(一)- http 包体传输
深入理解 web 协议(一)- http 包体传输
|
30天前
|
存储 安全 前端开发
HTTP 协议 与HTTPS
HTTP 协议 与HTTPS

推荐镜像

更多