【问题标题】:JavaScript client for SpringWebFlux to POST dataSpringWebFlux 用于 POST 数据的 JavaScript 客户端
【发布时间】:2018-11-28 12:42:08
【问题描述】:

我正在使用 Spring WebFlux 来体验反应式 API,但是我正在努力寻找一种解决方案,将数据从 JavaScript EventSource API “POST”到 WebFlux 端点。

我的端点如下所示:

@PostMapping(value="/start/{id}", produces = MediaType.TEXT_EVENT_STREAM_VALUE , consumes=MediaType.APPLICATION_JSON_VALUE)
public Flux<Integer> startProcessing(@PathVariable("id") Long id, @RequestBody ProcessDetails process)

而且我可以很容易地使用 POSTMAN 访问端点,但是用于获取 eventSource 的 JavaScript EventSource api 不允许发送 POST body 。发送的请求始终是 GET 请求。

<script>    
var source = new EventSource("/start/34");
...

如何将内容从浏览器发布到 WebFlux 端点?

【问题讨论】:

    标签: server-sent-events spring-webflux eventsource


    【解决方案1】:

    EventSource 通常,服务器发送的事件是单向的,从服务器到客户端 (see reference)。

    如果您想将数据从浏览器 POST 到服务器,任何常规的 AJAX POST 都可以。

    请注意,使用您当前的端点设置,浏览器应发送带有 JSON 正文的 POST 请求,然后接收无限的 SSE 流。

    如果您想要双向的消息流,那么 WebSockets 就是这里的答案。 Spring WebFlux 目前支持 raw WebSockets,所以目前没有可用的 Sock.js/STOMP 抽象。

    【讨论】:

    • 有没有办法在不使用 EventSource API 的情况下从浏览器发送 XHR 以从服务器接收数据流?我很想看到一个示例 impl。首先发布请求并获取通过第二次调用生成的事件源的问题在于,它引入了在服务器中具有状态、多个节点之间的会话传播或启用粘性会话的要求。服务应该是无状态的。
    • 我不知道有什么方法可以做到这一点。我认为您不能使用事件源发布数据。也许 websockets 和 stomp 是要走的路。
    • 在向 WebFlux 服务发布 XMLHttpRequest 后,您可以监听 onreadystatechange 以流式传输结果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-24
    • 1970-01-01
    • 2015-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多