如何从 Akka HTTP 获取 WebSocket 关闭代码?

How to get WebSocket close code from Akka HTTP?

我们使用 Akka HTTP 来处理我们使用 akka 流的网络套接字连接 API。我们正在使用将传入消息通过管道传输到 "connection actor" 的流。代码片段如下:

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 套接字关闭时,连接 actor 会收到 "WebSocketClose" 消息,我们会清理内部资源。我们现在需要知道根据标准 WebSocket CloseEvent codes 关闭连接的原因是什么。

有没有办法从 Akka HTTP 获取关闭代码并将其发送到连接 actor 以便它可以采取适当的操作?

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

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

看起来好像需要先解决这个问题。

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

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

我假设客户端 close/error 映射到 Flow complete/failure,这意味着其他接收器应该能够以类似的方式处理 close/error。

my code `