如何从 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
`
我们使用 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 `