当前位置: 首页 > 知识库问答 >
问题:

如何在Quarkus中设置服务器发送事件(SSE)的事件名称

蒲深
2023-03-14

我有以下Quarkus资源:

@Path("/myResource")
class MyResource {
    @GET
    @Path("/eventStream")
    @Produces(MediaType.SERVER_SENT_EVENTS)
    @SseElementType(MediaType.APPLICATION_JSON)
    fun stream(): Multi<MyDto> = deviceStatusService.getStream()
}

这将生成没有事件名称的事件,并且只生成数据部分。如何指定事件名称?

共有2个答案

堵宏毅
2023-03-14

根据对该问题的评论,看起来它没有在Resteasy库中实现,一种选择是使用非反应性方法,例如

    @GET
    @Path("/eventStream")
    @Produces(MediaType.SERVER_SENT_EVENTS)
    @SseElementType(MediaType.APPLICATION_JSON)
    fun stream(@Context sse: Sse, @Context sseEventSink: SseEventSink) { 
        return deviceStatusService.getStream().subscribe().asIterable().forEach { it -> sseEventSink.send(sse.newEvent("myEvent", it.toString()))}
    }

您可以使用OutboundsSeventImpl。BuilderImpl()使用json对象生成事件。尽管这也是一个暂时的解决方案

孔星宇
2023-03-14

我的最终代码是:

    @GET
    @Path("/eventStream")
    @Produces(MediaType.SERVER_SENT_EVENTS)
    @SseElementType(MediaType.APPLICATION_JSON)
    fun stream(@Context sse: Sse, @Context sseEventSink: SseEventSink) {
        deviceStatusService.getStream().subscribe().with { deviceStatus ->
            sseEventSink.send(sse.newEventBuilder()
                        .name("deviceStatus")
                        .data(deviceStatus)
                        .build())
        }
    }
 类似资料:
  • 我有一个ASP。net core 3.1服务器项目,它有一个非常简单的API发送单向服务器发送事件(SSE),如下所示: 现在,我想通过C#UWP客户端接收这些事件。很遗憾,我只收到第一个事件: 如何在UWP中创建行为以始终监听该连接并接收我可以进一步处理的事件?

  • 我想要实现的是: user1向服务器发送消息(一个简单的POST请求) 服务器部分是(events.php) 我在(true)时尝试了无限循环以避免3秒的轮询。我也尝试过没有那个无限循环。只有发送消息的用户收到事件。 我理解这种做法并不好。但是,将SSE用于聊天应用程序的最佳实践是什么? 如何向所有用户发送事件?

  • 使用系统将“服务器发送事件(SSE)样式”事件流式传输到F#中的前端的轻量级方式是什么。网Http库?我了解事件流格式(例如,这个PHP示例代码),但我正在寻求一些指导,以便在服务器端F#应用程序(我在.Net Framework 4.8上)中实现流部分。

  • 您好,我正在React中开发一个web应用程序,它使用Nginx从Express服务器接收SSE数据。 JS服务器 索引:JS const events=新事件源('https://api.myDomain.com/events', ); axios。post(<代码>https://api.myDomain.com/addCart,{客户端:this.state.clientId,购物车:car

  • 我是 SSE(服务器发送事件)的新手。我找到了一种在Spring启动中使用SSE发送响应的方法。我能够每 20 秒发送一次响应。我用下面的代码做同样的事情。 但问题是,这个方法每20秒就被调用一次。 但是,我的要求是每20秒向客户端发送一次空响应,并在新用户添加到数据库时发送响应。 如何实现我的目标?或者我在概念上完全错了。

  • 概述 客户端代码 概述 建立连接 open事件 message事件 error事件 自定义事件 close方法 数据格式 概述 data:数据栏 id:数据标识符 event栏:自定义信息类型 retry:最大间隔时间 服务器代码 参考链接 概述 传统的网页都是浏览器向服务器“查询”数据,但是很多场合,最有效的方式是服务器向浏览器“发送”数据。比如,每当收到新的电子邮件,服务器就向浏览器发送一个“