【问题标题】:How to get WebSocket close code from Akka HTTP?如何从 Akka HTTP 获取 WebSocket 关闭代码?
【发布时间】:2018-06-19 16:23:56
【问题描述】:

我们使用 Akka HTTP 来处理使用 akka 流 API 的 Web 套接字连接。我们正在使用将传入消息通过管道传输到“连接参与者”的 Flow。一个sn-p的代码如下:

val connection = system.actorOf(ConnectionActor.props())

val in = Flow[Message]
  .to(Sink.actorRef[Message](connection, WebSocketClosed))

val out = Source
  .actorRef[Message](500, OverflowStrategy.fail)
  .mapMaterializedValue(ws => connection ! WebSocketOpened(ws))

Flow.fromSinkAndSource(in, out)

当 web 套接字关闭时,连接参与者会收到“WebSocketClose”消息,我们会清理内部资源。我们现在需要知道根据标准WebSocket CloseEvent codes 关闭连接的原因是什么。

有没有办法从 Akka HTTP 获取关闭代码并将其发送到连接参与者,以便它可以采取适当的行动?

【问题讨论】:

    标签: scala akka akka-stream akka-http


    【解决方案1】:

    我能够在akka-http 10.2.6 服务器中处理客户端(浏览器)错误代码。

    我的用例是将传入消息通过管道传输到由ActorSink.actorRef[T]() 创建的Sink。创建接收器时,可以设置 2 个回调 onCompleteMessage onFailureMessage 将正常的 WebSocket 关闭(代码=1000)或错误转换为我们的自定义消息类型。

    我认为客户端关闭/错误映射到流完成/失败,这意味着其他接收器应该能够以类似的方式处理关闭/错误。

    my code `

    【讨论】:

      【解决方案2】:

      事实证明,目前这在 Akka HTTP 中是不可能的。请参阅以下 GitHub 问题:

      https://github.com/akka/akka-http/issues/2458

      似乎需要先解决这个问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-10-18
        • 2018-12-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-03
        • 2022-01-10
        相关资源
        最近更新 更多