- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我开始从 Spring-boot 学习 Webflux。我了解到,对于 RestController 的端点,您可以定义一个 Flux 请求主体,我希望在其中有一个真正的通量流,也就是说,整个请求的各个部分一个接一个地出现,并且这些部分也可以一个接一个地处理.但是,在使用客户端和服务器构建一个小示例后,我无法使其按预期工作。
这是服务器的片段:
@PostMapping("/digest")
public Flux<String> digest(@RequestBody Flux<String> text) {
continuousMD5.reset();
return text.log("server.request.").map(piece -> continuousMD5.update(piece)).log("server.response.");
}
注意:每段文本都会被发送到一个连续的MD5对象,该对象会累加所有的片段,并在每次累加后计算并返回中间MD5哈希值。流将在 MD5 计算之前和之后被记录。
这是客户端的片段:
@PostConstruct
private void init() {
webClient = webClientBuilder.baseUrl(reactiveServerUrl).build();
}
@PostMapping(value = "/send", consumes = MediaType.TEXT_PLAIN_VALUE)
public Flux<String> send(@RequestBody Flux<String> text) {
return webClient.post()
.uri("/digest")
.accept(MediaType.TEXT_PLAIN)
.body(text.log("client.request."), String.class)
.retrieve().bodyToFlux(String.class).log("client.response.");
}
注意:客户端接受一些文本的流量流并记录该流并将其发送到服务器(作为流量流)。
令人惊讶的是,我发送 REST 请求并让客户端通过以下命令行接收通量流:
for i in $(seq 1 100); do echo "The message $i"; done | http POST :8080/send Content-Type:text/plain
我可以在客户端的日志中看到:
2019-05-09 17:02:08.604 INFO 3462 --- [ctor-http-nio-2] client.response.Flux.MonoFlatMapMany.2 : onSubscribe(MonoFlatMapMany.FlatMapManyMain)
2019-05-09 17:02:08.606 INFO 3462 --- [ctor-http-nio-2] client.response.Flux.MonoFlatMapMany.2 : request(1)
2019-05-09 17:02:08.649 INFO 3462 --- [ctor-http-nio-6] client.request.Flux.SwitchIfEmpty.1 : onSubscribe(FluxSwitchIfEmpty.SwitchIfEmptySubscriber)
2019-05-09 17:02:08.650 INFO 3462 --- [ctor-http-nio-6] client.request.Flux.SwitchIfEmpty.1 : request(32)
2019-05-09 17:02:08.674 INFO 3462 --- [ctor-http-nio-2] client.request.Flux.SwitchIfEmpty.1 : onNext(The message 1)
2019-05-09 17:02:08.676 INFO 3462 --- [ctor-http-nio-2] client.request.Flux.SwitchIfEmpty.1 : request(1)
2019-05-09 17:02:08.676 INFO 3462 --- [ctor-http-nio-2] client.request.Flux.SwitchIfEmpty.1 : onNext(The message 2)
...
2019-05-09 17:02:08.710 INFO 3462 --- [ctor-http-nio-2] client.request.Flux.SwitchIfEmpty.1 : onNext(The message 100)
2019-05-09 17:02:08.710 INFO 3462 --- [ctor-http-nio-6] client.request.Flux.SwitchIfEmpty.1 : request(1)
2019-05-09 17:02:08.710 INFO 3462 --- [ctor-http-nio-6] client.request.Flux.SwitchIfEmpty.1 : request(1)
2019-05-09 17:02:08.710 INFO 3462 --- [ctor-http-nio-6] client.request.Flux.SwitchIfEmpty.1 : request(1)
2019-05-09 17:02:08.711 INFO 3462 --- [ctor-http-nio-2] client.request.Flux.SwitchIfEmpty.1 : onComplete()
2019-05-09 17:02:08.711 INFO 3462 --- [ctor-http-nio-6] client.request.Flux.SwitchIfEmpty.1 : request(1)
2019-05-09 17:02:08.711 INFO 3462 --- [ctor-http-nio-6] client.request.Flux.SwitchIfEmpty.1 : request(1)
2019-05-09 17:02:08.860 INFO 3462 --- [ctor-http-nio-6] client.response.Flux.MonoFlatMapMany.2 : onNext(CSubeSX3yIVP2CD6FRlojg==)
2019-05-09 17:02:08.862 INFO 3462 --- [ctor-http-nio-6] client.response.Flux.MonoFlatMapMany.2 : onComplete()
^C2019-05-09 17:02:47.393 INFO 3462 --- [ctor-http-nio-6] client.request.Flux.SwitchIfEmpty.1 : cancel()
每一段文本都被识别为流量流的一个元素,并被单独请求。
但是在服务器日志中:
2019-05-09 17:02:08.811 INFO 3475 --- [ctor-http-nio-2] server.request.Flux.SwitchIfEmpty.1 : onSubscribe(FluxSwitchIfEmpty.SwitchIfEmptySubscriber)
2019-05-09 17:02:08.813 INFO 3475 --- [ctor-http-nio-2] server.response.Flux.Map.2 : onSubscribe(FluxMap.MapSubscriber)
2019-05-09 17:02:08.814 INFO 3475 --- [ctor-http-nio-2] server.response.Flux.Map.2 : request(1)
2019-05-09 17:02:08.814 INFO 3475 --- [ctor-http-nio-2] server.request.Flux.SwitchIfEmpty.1 : request(1)
2019-05-09 17:02:08.838 INFO 3475 --- [ctor-http-nio-2] server.request.Flux.SwitchIfEmpty.1 : onNext(The message 1The message 2The message 3The message 4The message 5The message 6The message 7The message 8The message 9The message 10The message 11The message 12The message 13The message 14The message 15The message 16The message 17The message 18The message 19The message 20The message 21The message 22The message 23The message 24The message 25The message 26The message 27The message 28The message 29The message 30The message 31The message 32The message 33The message 34The message 35The message 36The message 37The message 38The message 39The message 40The message 41The message 42The message 43The message 44The message 45The message 46The message 47The message 48The message 49The message 50The message 51The message 52The message 53The message 54The message 55The message 56The message 57The message 58The message 59The message 60The message 61The message 62The message 63The message 64The message 65The message 66The message 67The message 68The message 69The message 70The message 71The message 72The message 73The message 74The message 75The message 76The message 77The message 78The message 79The message 80The message 81The message 82The message 83The message 84The message 85The message 86The message 87The message 88The message 89The message 90The message 91The message 92The message 93The message 94The message 95The message 96The message 97The message 98The message 99The message 100)
2019-05-09 17:02:08.840 INFO 3475 --- [ctor-http-nio-2] server.response.Flux.Map.2 : onNext(CSubeSX3yIVP2CD6FRlojg==)
2019-05-09 17:02:08.852 INFO 3475 --- [ctor-http-nio-2] server.response.Flux.Map.2 : request(32)
2019-05-09 17:02:08.852 INFO 3475 --- [ctor-http-nio-2] server.request.Flux.SwitchIfEmpty.1 : request(32)
2019-05-09 17:02:08.852 INFO 3475 --- [ctor-http-nio-2] server.request.Flux.SwitchIfEmpty.1 : onComplete()
2019-05-09 17:02:08.852 INFO 3475 --- [ctor-http-nio-2] server.response.Flux.Map.2 : onComplete()
2019-05-09 17:02:47.394 INFO 3475 --- [ctor-http-nio-2] server.response.Flux.Map.2 : cancel()
2019-05-09 17:02:47.394 INFO 3475 --- [ctor-http-nio-2] server.request.Flux.SwitchIfEmpty.1 : cancel()
我看到所有文本片段同时到达服务器,因此被作为流量流中的一个大元素处理(也可以验证只计算了一个 MD5 哈希值,而不是 100 个)。
我期望的是服务器也从客户端接收文本片段作为通量流中的元素,否则对于服务器来说它不是真正的 react ,而只是一个正常的阻塞请求。
任何人都可以帮助我了解如何使用 Webflux 发出真正的通量响应请求吗?谢谢!
更新
我使用类似的命令行向服务器发出 REST 请求,可以看到服务器接收到的文本片段(“消息 x”)作为通量流。所以我猜服务器没问题,现在问题可能出在客户端:如何使用 WebClient 发出真正的 flux REST 请求?
最佳答案
如果想实现流媒体效果,可以:
application/stream+json
。查看以下关于它的 SO 线程: Spring WebFlux Flux behavior with non streaming application/json 关于java - 如何提出真正的通量请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56109240/
我正在创建一个“杀死”人的命令。我希望机器人返回消息“哈!你以为!@Author 死了!”如果他们 ping 机器人。 (我如何让机器人查看它是否被 ping 过?)答案已更新并且现在可以正常工作。
我有一个在heroku 上运行的应用程序,例如my-app.herokuapp.com。但是,如果我输入 ping -c 10 my-app.herokuapp.com 在Mac终端中,它显示请求超时
我在 minikube 集群中有一个 k8s 服务/部署(default 命名空间中的名称 amq: D20181472:argo-k8s gms$ kubectl get svc --all-nam
我有 2 个 EC2 Ubuntu 实例。它们共享相同的 VPC、子网和安全组。实例的防火墙已关闭。但是私网IP还是无法互相ping通。如何让这些实例互相 ping 通? 最佳答案 在安全组中,为“回
我可以连接到我的 wifi(另一台笔记本电脑在此网络上正常),但是浏览器不会加载网页,并且我无法 ping 通 google.com 我注意到的一件奇怪的事情是,如果我查看/etc/resolv.co
我在 Azure 上使用 PUBSUB 时遇到问题。 Azure 防火墙将关闭闲置任意时间的连接。对于时间长度存在很多争议,但人们认为大约是 5 - 15 分钟。 我使用 Redis 作为消息队列。为
我很无聊,因为我的开发服务器已关闭,我正在运行命令提示符以无限期地 ping 服务器,以便我看到它们何时停止超时并知道我可以再次工作。与此同时,我想制作一个 Air 应用程序来为我做这件事,所以当它开
是否可以向 nat 后面的主机发送回显请求 后。所有的 echo-request 都不包含目标主机的端口,因此如果有多个主机使用相同的外部 ip 地址,nat 将如何将 echo-reques
我按照以下链接创建了 azure 实例 http://michaelwasham.com/2013/09/03/connecting-clouds-site-to-site-aws-azure/ 我可
friend 们,我认为这是一件奇怪的事情(至少对我来说)。因为我了解到互联网上的每个域名都有一个对应的IP地址。它存储在 DNS 上的某个位置。 现在,这就是我从命令行 ping google.co
我正在尝试使用分配给 kube-dns 服务的集群 IP 从 dnstools pod ping kube-dns 服务。 ping 请求超时。在同一个 dnstools pod 中,我尝试使用暴露的
我按照以下链接创建了 azure 实例 http://michaelwasham.com/2013/09/03/connecting-clouds-site-to-site-aws-azure/ 我可
我有一个虚拟网络 vmnet2,使用 10.0.2.0/24 网络,我希望我的 Linux 服务器能够 ping 默认网关。 我已将 Linux eth1 值设置为 IPADDR="10.0.2.50
我想将我的本地 mysql 数据库迁移到 Amazon RDS。但首先我想测试它是否正在接收通信。所以我尝试ping它。但是尝试超时。 ping -c 5 myfishdb.blackOut.us-w
我对 AWS 很陌生,已经测试过启动一个实例,如下所示: 下面是安全组,附加了inbound规则 我的问题是我无法 ping 通这台服务器。我可以知道我是否理解错了什么吗? 最佳答案 您需要为其创建新
我对 AWS 很陌生,已经测试过启动一个实例,如下所示: 下面是安全组,附加了inbound规则 我的问题是我无法 ping 通这台服务器。我可以知道我是否理解错了什么吗? 最佳答案 您需要为其创建新
如何确定 IP 地址是否可 ping 通?另外,如何使用 perl 脚本找到可 ping 的 IP 是静态的还是动态的? 最佳答案 看看 Net::Ping模块; #!/usr/bin/env per
我已经研究这个有一段时间了。对于网站 static.etreeblog.com,如果网站离线,我想更改 duv 的类。 我研究过的方法: - 使用带有图像的 onerror 标签来运行函数。-问题:我
我正在使用 OpenvSwitch-2.5.2 在两个虚拟机上设置第 2 层网络,如上图所示。 在阅读了 ovs 官方教程和其他一些文章后,我在每个虚拟机上尝试了以下命令: # on vm1 ip l
我有一个名为 backend 的 Docker 容器,它公开了一个端口 8200,并在其中的 gunicorn 后面运行了一个 django 服务器。这是我的 Dockerfile: FROM deb
我是一名优秀的程序员,十分优秀!