hackergame-challenge-docker icon indicating copy to clipboard operation
hackergame-challenge-docker copied to clipboard

add websocket ping per 15s

Open xmcp opened this issue 3 years ago • 4 comments
trafficstars

If backend does not periodically ping client, nginx will close the socket after idling for 60s according to proxy_read_timeout.

xmcp avatar Nov 11 '22 12:11 xmcp

我本地测试了没有问题,虽然我感觉 timeout killer 好像没有必要,但是放着问题应该也不大。

taoky avatar Nov 11 '22 19:11 taoky

timeout killer 是考虑到如果有人掉线,两次没回复ping,就把nc停掉。 不加这个判断的话,TCP keepalive可能也有这个功能,但我不确定。我是看到 ws库的文档这么写了 就抄了一份过来。不加timeout killer确实也行,因为选手直接nc的话也有掉线的问题。

xmcp avatar Nov 11 '22 20:11 xmcp

看了一下TCP keepalive默认情况是空闲两个小时才生效。所以如果选手直接掉线,而且题目也一直不输出消息的话,就会等到 min(2h, 题目超时) 才关闭。这样做之后可以把web终端的掉线关闭时间缩短到35s,但是直接nc的选手如果掉线还是会等到超时。

(叠个甲:以上内容都是我脑补的,并没有实际去测。可能不对。)

xmcp avatar Nov 11 '22 20:11 xmcp