无响应时重新连接WebSocket客户端连接

8ulbf1ek  于 2022-11-11  发布在  其他
关注(0)|答案(1)|浏览(184)

我有很多到WebSocket服务器的异步连接。过了一段时间,服务器停止响应,脚本只是等待响应。我必须dockerize和部署脚本,所以重置连接的唯一方法是再次运行docker映像。
理想的解决方案是类似于WebSockets.open的关键字参数。

map(container) do item
   @async begin
       WebSockets.open(url) do ws 
          payload = generatepayload(item)
          if writeguarded(ws, JSON3.write(payload))
              while isopen(ws)
                 data, success = readguarded(ws)
                 ### process data 
              end
           end
       end
    end
end

但任何我只需要编写julia代码的解决方案都可以工作。

ddrv8njm

ddrv8njm1#

jl的readguarded()允许超时读取错误异常被忽略。只要你的套接字read有一个合理的超时(它应该),自己处理读取失败可能会有所帮助,因为这可以给予你一个新的与服务器的websocket连接。例如:

map(container) do item
   @async while true
       try
           WebSockets.open(url) do ws  # reopens the websocket on while loop
              payload = generatepayload(item)
              if writeguarded(ws, JSON3.write(payload))
                  while isopen(ws)
                     data, success = read(ws)
                     ### process data 
                  end
              end
           end
       catch y
           @debug y  # log something here
           maybe check server some other way here and break if offline
       end
    end
end

相关问题