Akka Websocket已完成,但客户端仍已连接

时间:2020-09-14 23:43:00

标签: websocket akka akka-stream

(Akka 2.6.5,Akka-http 10.1.12)

我在服务器的每端都使用Source.queueSink.actorRef进行服务器/客户端的网络套接字设置。

事实证明,我的系统存在一个相当关键且出乎意料的缺陷(在生产环境中同样存在):

  1. 接收器actor失败并终止(记录了死信)
  2. 向接收者actor发送流失败消息(在Sink.actorRef中配置)-由于actor确实已死亡,该消息也以无效字母记录。

所以我们有一个完整的Web套接字流吗?这就是Half-closed websockets会说的(尽管注意到标题ID是“ half-closed- client -websockets ...”)

发生的事情是……什么都没有。连接的客户端保持连接状态-没有完整的消息或故障。

是否需要某种配置来主动告诉akka在发生此类故障时完全关闭Http?

测试

我在综合测试中转载了该问题:

  1. 建立连接
  2. 睡眠70秒钟(只是为了确保配置存活功能/使其正常工作)
  3. 从服务器发送消息
  4. 确保收到客户收据
  5. 杀死服务器参与者接收器(并且看到与上面相同的Stream Failure->死信)
  6. 等待客户端确认完成(100秒)-可以:
    • 如果我什么都不做->超时
    • 如果我在等待完成之前从客户端向服务器发送消息:
      1. 60s之后:Aborting tcp connection ... because of upstream failure: TcpIdleTimeoutException
      2. 流发送到客户端接收器失败。

注释

在这个阶段,我故意不包括代码,因为我试图正确地理解该技术-我发现了一个错误,或者对Web套接字的含义有基本的误解工作(失败)。 如果您认为我应该包含代码,则需要说服我它可能如何帮助您创建答案

在生产中,无法关闭意味着Websocket客户端正在等待数据12个小时(当时未尝试发送消息)

0 个答案:

没有答案